有谁知道如何在Delphi Win32应用程序中嵌入Mono运行时的细节?官方文档对于Win32环境(www.mono-project.com/Embedding_Mono)没有太大帮助。
更新
我非常熟悉Delphi中的静态链接的变幻莫测,并且对DLL非常满意。 Mono本身有依赖关系,所以再多一个DLL真的没什么大不了的。关于FPU控制字的评论是我关注的问题之一,因为我认为CG默认设置与Microsoft工具不同。以下是我认为需要的内容:
更新(6-12-2011):
如果有人感兴趣,我刚刚在Google Code上找到了一个项目,用于在Monphi应用程序中嵌入Mono:
答案 0 :(得分:6)
我说你的首要任务是搜索一个libmono dll
如果你发现或构建它作为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)