如何在VS2010中创建混合的托管/本机C++ dll?

4
我想创建一个dll,该dll具有托管的C++接口,但实际工作的代码是本地C++。目前我们正在使用COM(STA)与托管代码进行交互,但现在我们想要使用ThreadPool调用模块,这将不允许STA线程。我们希望避免为MTA COM重新编码模块。
我之前也问过这个问题,以及其他问题,但似乎回答并没有解决基本问题:如何设置项目。我正在使用VS2010,并希望列出步骤。我尝试从托管库(C++类库)开始添加非托管类,以及MFC DLL(我们利用一些MFC类,但最终希望解决它们),并添加托管类。我似乎永远无法使其编译。
请问能否耐心解释一下从项目类型开始的步骤?
1个回答

4

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

然而,您可以将一个静态库嵌入到程序集中,该库是原生编译的,并且该本地库将不会被修改合并。也就是说,如果您静态链接到一个本地静态库,您将产生您正在寻找的混合模式程序集。


2
只要未使用 /GL 编译本机静态库,将其链接到 C++/CLI 程序集中,就可以获得真正的混合模式程序集。 - ildjarn
@ildjarn:有趣 -- 不知道这一点 (+1)。然而,为什么有人想要这样做呢? :P - Billy ONeal
本地的C++编译器在某些方面比JIT编译器更优化,因此使用本地代码是值得的。重型浮点数运算和SIMD向量化就是其中之一。 - ildjarn
@Billy: 你是在问为什么人们要使用静态库,无论是原生的还是托管的吗?也就是说,难道不适用于原生可执行文件使用原生静态库的理由也适用于此吗? - ildjarn
@Billy:说实话,我不知道使用本地静态库链接和使用.dll文件之间有什么优劣之分,这似乎只是个人偏好的问题。也就是说,如果有强烈的理由,我也不知道是什么。:-] - ildjarn
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接