7

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

更新:

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

  • 从“C”到 Delphi 的标题翻译(可能不太难)
  • Mono DLL 的编译(Mono 随附的是否可用?)
  • 更好地理解 FPU 控制字 goctha's(希望没有)
  • 来自尝试过这个特技而留下战斗伤痕的人的一些反馈;)

更新(2011 年 6 月 12 日):

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

monoemb4delphi

4

3 回答 3

6

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

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

  • 不使用cygwin(相信我)
  • 已知在 mingw 之外也可以工作(如果使用 C++,请避免可能的 mingw 特定 C++ 修改)
  • 最好带有一个可读的标题。

如果您找到或将其构建为 DLL(以满足 mghie 的正确评论),请编写一个标题(如 Stijn 建议的那样)它可以工作。

但这不是微不足道的,VM 并非完全是微不足道的野兽,并且通常会在通常的跨语言问题域中出现问题:库初始化(顺序)、FPU 异常掩码和一般的异常处理。这也是为什么我说“知道在 mingw 之外工作”的部分原因,研究它在其他编译器中的接口方式可能会为如何正确解决这个问题提供指导。

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

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

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

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

请注意,如果您真的必须自己执行此操作,这不是一个简单的方法。

于 2009-05-28T08:39:40.457 回答
2

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

于 2009-05-28T07:11:49.183 回答
2

您可能想看看http://www.remobjects.com/hydra.aspx

于 2009-05-28T08:20:35.240 回答