.net 在delphiwin32中嵌入Mono

.net 在delphiwin32中嵌入Mono,.net,delphi,winapi,mono,embedding,.net,Delphi,Winapi,Mono,Embedding,有人知道如何在Delphi Win32应用程序中嵌入Mono运行时的细节吗?官方文档对Win32环境()没有太大帮助 更新: 我非常熟悉Delphi中静态链接的变幻莫测,如果有DLL,我会非常高兴。Mono本身就有依赖性,所以再多一个DLL其实没什么大不了的。关于FPU控制字的评论是我关注的问题之一,因为我认为CG默认设置与Microsoft工具不同。以下是我认为需要的: 从“C”到Delphi的标题翻译(可能不太难) 编译Mono DLL(Mono附带的DLL是否可用?) 更好地理解FPU控

有人知道如何在Delphi Win32应用程序中嵌入Mono运行时的细节吗?官方文档对Win32环境()没有太大帮助

更新:

我非常熟悉Delphi中静态链接的变幻莫测,如果有DLL,我会非常高兴。Mono本身就有依赖性,所以再多一个DLL其实没什么大不了的。关于FPU控制字的评论是我关注的问题之一,因为我认为CG默认设置与Microsoft工具不同。以下是我认为需要的:

  • 从“C”到Delphi的标题翻译(可能不太难)
  • 编译Mono DLL(Mono附带的DLL是否可用?)
  • 更好地理解FPU控制字goctha(希望没有)
  • 有人因为尝试了这个特技而留下了战斗的伤疤,他给出了一些反馈;)
更新(6-12-2011):

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


这是一个如何将C库链接到Delphi的示例。通过一点工作,应该可以使用此技术从Delphi访问
mono\u jit\u init

您可能想看一看。

mono似乎可以使用mingw构建,尽管我发现大多数引用都是从Linux交叉编译的,例如

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

  • 不使用cygwin(相信我)
  • 已知,也在外部(避免使用可能的特定于C++的MC++),
  • 最好带有可读的标题
如果您找到它或将它构建为DLL(以满足mghie的正确评论),那么编写一个头(如Stijn所建议的)它就可以工作了

不过,这并不是一件小事,虚拟机并不是一件小事,通常跨语言问题域会出现问题:库初始化(order)、FPU异常掩码和异常处理。部分原因也是我之所以说“知道在mingw之外工作”,研究它在其他编译器中的接口可能会给如何正确处理这一问题提供指导

请注意,mono教程有一个mono lib初始值设定项,但这并不意味着mono使用的所有lib都已正确初始化。特别是mingw的libc可能需要初始化,因为它们通常是通过CTOR初始化的。我的(非常初始的)mingw glue代码如下:

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

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


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

Mono是LGPL,因此Windows上的静态链接需要从Novell获得商业许可证,如(搜索“许可证”)中所述。你确定你读对了吗?我知道如果你想嵌入mono并拒绝访问应用程序的mono位以避免修补,你需要一个商业许可证。链接的文章是关于将C库静态链接到Delphi代码的。以这种方式链接Mono将破坏许可证,因为您不能再使用更新的版本替换它。可以说,LGPL正是为了保护用户的“修补”权。如果要使用OTOH mono.dll,那么使用dll的标准方式将适用,而Velthuis文章中的信息对这一点并没有真正的帮助。我看过Rudy的文章,过去也曾与LibTiff做过类似的工作。没有太多乐趣,所以我会接受DLL方法。@mghie-您可以静态链接LGPL代码,只要您还提供原始对象文件,以便最终用户可以替换LGPL部分并重新链接。我不知道这是否有帮助,但Visual Studio 2008也可以构建Mono运行时。解决方案文件位于/mono/msvc中。我认为对于DLL路由来说,这会更好,这是Delphi的唯一方法。(从理论上讲,用BCB静态构建时也可以工作)我有Hydra,但它并没有真正解决我试图实现的目标。即能够嵌入.Net运行时并提供与Delphi的紧密本机集成。顺便说一句,Hydra是个不错的工具。