我有一个调用 c++/cli 接口 DLL 的 C# 表单,它调用了一个 win32 本机 c++ dll。最初这是用 VS2010 编写的,并且正在工作 - 我能够将 System::String 编组为 std::string,将其传递给本机 dll,然后计算出值。然后我将 C# 和 c++/cli 项目转换为 VS2012 以启用智能感知。这需要安装服务包以重新启用 VS2010 中的 4.0 .NET 框架。我在 2010 年重建了 Win32 dll,在 VS2012 中重建了 C# 应用程序和 c++/cli dll,现在我在调用 dll 时收到错误:
调试断言失败!
程序:... 文件:f:\dd\vctools\crt_bld\self_x86\crt\src\dbgheap.c 行:1424
表达式:_pFirstBlock == pHead
public ref class ManagedWrapper
{
CSampleWin32Library* m_pUnmanagedWrapper;
public:
ManagedWrapper() {m_pUnmanagedWrapper = new CSampleWin32Library();}
~ManagedWrapper() {delete m_pUnmanagedWrapper;}
//Test call to prove integration
void Test(int x, System::String^ testString) {
//marshaling example: http://msdn.microsoft.com/en-us/library/bb384865.aspx
std::string tmpStdString = marshal_as<std::string>(testString);
m_pGambitUnmanagedWrapper->Test(x, tmpStdString); //ERROR OCCURS HERE
};
};
希望这就像丢失的某些设置一样简单,或者现在在 VS2012 中需要。据我所知,我没有更改任何代码。