在CLR库中使用以<mutex>为特色的静态库

时间:2017-11-14 12:55:53

标签: c++ c++-cli clr

我有一个用c ++编写的实用程序库,我在很多项目中使用它。

我想在c ++ / CLI中为它创建一个部分包装器,将它的一些功能带到我的vb.net项目中但是立即遇到了问题 -

<mutex> is not supported when compiling with /clr or /clr:pure.

我无法使用互斥锁来删除这些内容,因为我所拥有的ria日志记录实用程序是我想要这个包装器的主要内容,它在很大程度上依赖于互斥锁。

那么......有什么方法可以解决这个问题吗?

2 个答案:

答案 0 :(得分:0)

如果你不能&#34;隐藏&#34;通过包装器C ++类/代码或简单的前向声明,在CLR(mutex,atomic,...)中非法的C ++头文件,

我成功的另一种方式是通过创建一个Interop程序集:   - 一个非托管的C ++&#34;层&#34;其唯一目的是隔离真实的&#34; C ++代码(包含互斥,原子和CLR中的任何非法内容)
  - 托管C ++&#34;图层&#34;它使用非托管层,并将其API /服务暴露给.NET世界。

不幸的是,丑陋,沉重,难以维护和容易出错。

答案 1 :(得分:0)

只有extern“C”导出函数可以从本机DLL加载到/ clr:pure。 您必须通过全局C样式函数包装您的功能。这些可以导出为DLL并导入到/ CLR App或Lib中。 转到https://www.codeproject.com并搜索“所有可执行文件的控制台输出常规”。有一个示例,您可以在其中查看具体语法。 祝你好运