【问题标题】:How to create mixed managed/native C++ dll in VS2010?如何在 VS2010 中创建混合托管/本机 C++ dll?
【发布时间】:2011-09-11 03:11:52
【问题描述】:

我想创建一个具有托管 C++ 接口的 dll,但在下面工作的实际代码是本机 C++。

目前我们正在使用 COM (STA) 与托管代码进行交互,但现在我们想使用 ThreadPool 调用模块,这将不允许 STA 线程。我们希望避免为 MTA COM 重新编码模块。

我之前和其他人都问过这个问题,但似乎回答没有解决基本问题:如何设置项目。我正在使用 VS2010,并希望列出步骤。我尝试从托管库(C++ 类库)开始并添加非托管类以及 MFC DLL(我们使用了一些 MFC 类,但希望最终解决它们)并添加托管类。我似乎永远无法编译它。

有人可以原谅我的无知,并从项目类型开始明确列出步骤吗?

【问题讨论】:

    标签: .net visual-c++ c++-cli interop mixed-mode


    【解决方案1】:

    从 C++/CLI 开始,Visual Studio 在编译时不再生成混合模式程序集(如您所描述的)。 “本机”C++ 位被编译成不可验证的 CIL。

    但是,可以将静态库嵌入到您的程序集中,该程序集是本机编译的,并且该本机库将在未更改的情况下合并。也就是说,如果您静态链接到本机静态库,您将生成您正在寻找的混合模式程序集。

    【讨论】:

    • 如果您将本机静态库链接到 C++/CLI 程序集,则可能获得真正的混合模式程序集,只要本机静态库不是使用 /GL 构建的。
    • @ildjarn:有趣——不知道(+1)。但是,为什么要这样做呢? :P
    • 原生 C++ 编译器在某些方面比 JIT 编译器优化得更好,因此值得拥有原生代码。我想到了繁重的浮点数学和 SIMD 矢量化。
    • @ildjarn:我不是说你为什么想要本地代码。我是说你为什么要在同一个程序集中使用本机代码。如果它在它自己的 DLL 中,它可以被重用;如果你将它锁定在 .NET 程序集中,它几乎就卡在那里了。
    • @Billy :您是在问为什么要使用静态库,无论是原生的还是托管的?即,与使用本机静态库的本机可执行文件的基本原理不同吗?
    猜你喜欢
    • 1970-01-01
    • 2020-05-03
    • 2015-04-04
    • 1970-01-01
    • 2011-09-22
    • 2011-03-02
    • 2013-01-05
    • 2011-02-11
    • 1970-01-01
    相关资源
    最近更新 更多