在 C++ /CLR 项目中使用 C++ DLL 库项目

Posted

技术标签:

【中文标题】在 C++ /CLR 项目中使用 C++ DLL 库项目【英文标题】:Use C++ DLL library project in C++ /CLR project 【发布时间】:2015-05-13 11:42:13 【问题描述】:

我正在尝试在 C++ /CLR 托管包装器项目中使用非托管 C++ DLL 库项目,但由于非托管项目使用 <thread> 托管项目将无法构建: error C1189: #error : <thread> is not supported when compiling with /clr or /clr:pure.

要明确:托管项目本身使用<thread>,只有引用的非托管

无论如何我可以在非托管项目中使用线程并且仍然让它与托管包装器项目正确交互吗? (更改项目性质以使用托管线程不是一种选择)


编辑:我收到-2。我不知道为什么,我找不到任何关于这个特定案例的东西,我也不知道到底出了什么问题,但托管项目似乎也在编译非托管项目?

【问题讨论】:

【参考方案1】:

非托管项目的包含文件是否直接或间接包含<thread>?这可能是错误的原因。

尽量让非托管项目的接口头只定义接口,不包含任何依赖于实现的包含文件。

【讨论】:

被包装的本机类的标头包含<thread>,因为thread 是该类的私有成员。关于如何隐藏它的任何建议? @WhiteNightFury:您能否使用 PIMPL 隐藏部分或全部实现细节? msdn.microsoft.com/en-us/library/hh438477.aspx

以上是关于在 C++ /CLR 项目中使用 C++ DLL 库项目的主要内容,如果未能解决你的问题,请参考以下文章

c++调用c#的dll

在c#silverlight中调用c++ clr dll

运行使用 /clr 构建的 DLL 的本机 C++ 应用程序时访问冲突

C++ exe 到 dll 以用作组件 (CLR)

C,如何将多维数组传递给 CLR/类库项目中的函数

调用以 std::list 作为参数的 C++ 函数