我必须在我的C ++项目中使用第三方dll。我所知道的关于这个dll的是它是在Visual Studio 2013中构建的。我使用VS2010并且由于原因无法切换到2013.
所述dll导出一些返回std :: string的函数。不出所料,调用这些函数会在某些字符串释放代码中产生访问冲突。
据我了解这个问题,没什么好惊讶的,除了切换到VS2013之外没什么可以做的,我不能。
这是事情。这个第三方dll带有一个c#示例项目,可以导入它并且工作得很好!
所以我的问题是:
(纯粹是理论上的)为什么?它是.NET字符串编组工具吗?
假设我将有问题的dll包装在我自己的托管dll中,然后在我的非托管代码中使用该托管包装器。它会起作用吗?
如果问题2的答案是肯定的,那么如何?我完全不知道c#,所以我不介意几点。
编辑:
因此,出于纯粹的绝望,我在项目中调整了导入的函数签名 - 它是std::string (__cdecl *TFunc)();
,将其更改为BSTR (__cdecl *TFunc)();
- 它的工作原理!即使库手册和依赖性walker工具都坚持std :: string是正确的。将此作为编辑而不是答案发布,因为我仍然不知道这里发生了什么,这很可怕。