在Delphi Win32中嵌入Mono

时间:2009-05-28 05:14:43

标签: .net delphi winapi mono embedding

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

更新

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

  • 从“C”到Delphi的标题翻译(可能不太难)
  • Mono DLL的编译(Mono可以使用的那个?)
  • 更好地理解FPU控制字goctha(希望没有)
  • 某人因为尝试过此噱头而遭受战斗伤痕的反馈;)

更新(6-12-2011):

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

monoemb4delphi

3 个答案:

答案 0 :(得分: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,因为这是一个选项)

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

答案 1 :(得分:2)

这个article by Rudy Velthuis显示了如何将C lib链接到Delphi的示例。通过一些工作,应该可以使用这种技术从Delphi访问mono_jit_init

答案 2 :(得分:2)

您可能需要查看http://www.remobjects.com/hydra.aspx