代码之家  ›  专栏  ›  技术社区  ›  David Taylor

在Delphi Win32中嵌入Mono

  •  7
  • David Taylor  · 技术社区  · 15 年前

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

    更新:

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

    • 从“C”到Delphi的标题转换(可能不太难)
    • 编译mono dll(mono附带的dll可用吗?)
    • 更好地理解FPU控制字goctha(希望没有)
    • 有人因为尝试过这个特技而留下了战斗伤疤;的一些反馈;

    更新(2011年6月12日):

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

    monoemb4delphi

    3 回复  |  直到 13 年前
        1
  •  6
  •   Marco van de Voort    15 年前

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

    我想说你的首要任务是搜索一个libmono动态链接库

    • 不使用Cygwin(相信我)
    • 已知的工作,也在外部MIW(如果使用C++避免了可能的特定的CIM+特定的C++处理)
    • 最好带有可读的标题。

    如果您找到或将其构建为dll(以满足mghie的正确注释),那么编写一个头部(如stijn建议的那样),它可以工作。

    不过,这并不是一件小事,虚拟机并不完全是琐碎的野兽,而且在通常的跨语言问题领域中都会出现问题:库初始化(order)、FPU异常屏蔽和一般的异常处理。部分原因也是我为什么说“知道在Mingw之外工作”,研究它在其他编译器中的接口方式可能会给出如何正确处理这一问题的指针。

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

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

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

    我自己已经能够将gdb构建为lib并使用它(静态地在fpc中,但是,由于这是一个选项,我没有动机创建一个dll)

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

        2
  •  2
  •   Stijn Sanders    15 年前

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

        3
  •  2
  •   curious slab    15 年前