私はc++/ cliインターフェイスDLLを呼び出すC#フォームを持っています。これは、win32ネイティブc++dllを呼び出します。もともとこれはVS2010で書かれていて、機能していました-System::Stringをstd::stringにマーシャリングし、ネイティブdllに渡して、値を計算することができました。次に、C#およびc ++ / cliプロジェクトをVS2012に変換して、インテリセンスを有効にしました。これには、VS2010で4.0.NETフレームワークを再度有効にするためのサービスパックのインストールが必要でした。2010年にWin32dll、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で必要になった設定と同じくらい簡単です。私の知る限り、それ以外のコードは変更しませんでした。