在Delphi Win32中嵌入Mono

Dav*_*lor 7 .net delphi mono winapi embedding

有谁知道如何在Delphi Win32应用程序中嵌入Mono运行时的细节?关于Win32环境(www.mono-project.com/Embedding_Mono),官方文档不是很有帮助.

更新:

我非常熟悉Delphi中静态链接的变幻莫测,并且对DLL非常满意.Mono本身有依赖关系,所以再多一个DLL真的没什么大不了的.关于FPU控制字的评论是我关注的问题之一,因为我认为CG默认设置与Microsoft工具不同.这是我认为需要的:

  • 从"C"到Delphi的标题翻译(可能不太难)
  • 单声道DLL的编译(单声道附带的可用吗?)
  • 更好地理解FPU控制字goctha(希望没有)
  • 来自某人的反馈来自于尝试过此特技的战斗伤痕;)

更新(6-12-2011):

如果有人感兴趣,我刚刚在Google Code上找到了一个项目,用于在Monphi应用程序中嵌入Mono:

monoemb4delphi

Mar*_*ort 6

Mono似乎可以用mingw构建,尽管我发现大多数引用都是从Linux交叉编译的,例如http://www.mono-project.com/Cross-compiling_Mono_for_Windows

我要说你的首要任务是搜索一个libmono dll

  • 不使用cygwin(相信我)
  • 已知可以工作,也可以在mingw之外工作(如果使用C++,可以避免使用特定的C++修改)
  • 优选地带有可读头部.

如果你找到或构建它作为DLL(以满足mghie的正确评论),写一个标题(像Stijn建议)它可以工作.

尽管如此,虚拟机并不是一件容易的事,并且在通常的跨语言问题领域中存在问题:库初始化(顺序),FPU异常掩码和一般的异常处理.部分原因也是我说"知道在mingw之外工作"的原因,研究它在其他编译器中的接口方式可能会指出如何正确解决这个问题.

请注意,mono教程有一个单声道lib初始化器,但这并不意味着所有单声道使用的lib都已正确初始化.特别是mingw的libc可能需要初始化,因为它们通常是通过ctors初始化的.我的(最初的)mingw胶水代码在这里:

http://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/ide/fpmingw.pas?view=markup

另一方面,在DLL中,它可能通过DLL初始化例程进行初始化.

我自己已经能够将GDB构建为lib并使用它(静态地在FPC中,我没有动力制作DLL,因为这是一个选项)

请注意,如果你真的必须自己这样做,这不是一个简单的方法.