【问题标题】:Using a .net compiled dll inside native c++在本机 C++ 中使用 .net 编译的 dll
【发布时间】:2009-05-12 10:04:11
【问题描述】:

据我了解,任何 .NET 程序都会被编译为 MSIL,然后将其提供给 CLR,CLR 将其编译为汇编代码,并在 JIT 的帮助下执行它。

我想知道,因为 .NET 是 win32 api 的包装器,而 CLR 最终将 MSIL 转换为汇编程序。难道我不可能在 C# 中编写一些功能,制作一个 dll,然后我使用一个工具使它成为一个完整的 .net 独立文件,供我在 C 或 C++ 中的非托管代码中使用。

我是在谈论 Interops 和 COM 吗?这个想法和它不一样吗?我的目标是在没有 .NET 框架的机器上运行 .NET dll。

【问题讨论】:

    标签: .net c++ dll interop


    【解决方案1】:

    您可以使用Native Image Generator (Ngen.exe) 将 MSIL DLL 编译为本机代码 DLL,但这将不允许您在没有 .NET Framework 的系统上运行它。您仍然会引用该框架的其他 DLL,即使您包含这些 DLL,它也不会在没有 .NET 框架的系统上工作,因为该框架不仅仅是 DLL 的集合。

    【讨论】:

    • 确实,ngen 无法消除对实际组装的需要。程序集不仅仅是 IL 代码。它包含仍然需要运行的元数据。
    【解决方案2】:

    This KB article 解释了一种从本机代码调用托管方法的方法。但是,您仍然需要拥有 .NET 框架。

    【讨论】:

      【解决方案3】:

      This project 将允许您对静态方法进行非托管导出 .NET。

      【讨论】:

        【解决方案4】:

        这不是一种受支持的方式,许多功能(如反射)依赖于比原始机器代码更高级别提供的元数据。有一些程序(称为 .NET 链接器)可能会有所帮助,但它们并非 100% 可靠。

        【讨论】:

          【解决方案5】:

          如果您在网络上闲逛,我认为有许多工具可以“编译”.NET 程序集/代码来消除他们对框架的需求。不知道它们的工作情况如何......

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2013-05-08
            • 1970-01-01
            • 2010-09-21
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多