ソースコードが利用できないサードパーティのプロプライエタリDLLを使用しています。ただし、SWIG1.3.39を使用して自動生成されたように見えるラッパーコードは利用できます。ラッパーコードは、(DLLを説明するいくつかのヘッダーを使用して)DLLにコンパイルするC ++ファイルと、C ++ラッパーDLLへのPInvoke呼び出しを行うC#プロジェクトで構成されます。
プロジェクトソリューションに含めたC++プロジェクトですが、C ++コードでブレークポイントを設定すると、そこに到達することはありません。C#でF11を実行しようとすると、C ++関数内に入ると、代わりに「アセンブリの表示」が表示されます。
[ソリューション]>[プロポーティ] >[構成プロポーティ]がありますが、アンマネージ/ネイティブコードをデバッグするオプションがあるものが見つかりません。
編集
ラッパーのC++コードを使用できます。また、C#から渡した値が実際にC#コードに渡されていることを確認する必要があります。
// In one file of the C# wrapper:
public string GetKey()
{
// swigCPtr is a HandleRef to an object already created
string ret = csWrapperPINVOKE.mdMUHybrid_GetKey(swigCPtr);
return ret;
}
// In the csWrapperPINVOKE class in another file in the C# wrapper:
[DllImport("csWrapper.dll", EntryPoint="CSharp_mdMUHybrid_GetKey")]
public static extern StringBuilder mdMUHybrid_GetKey(HandleRef jarg1);
そして、C++ラッパーからのC++コード。
SWIGEXPORT char * SWIGSTDCALL CSharp_mdMUHybrid_GetKey(void * jarg1) {
char * jresult ;
mdMUHybrid *arg1 = (mdMUHybrid *) 0 ;
char *result = 0 ;
arg1 = (mdMUHybrid *)jarg1;
result = (char *)(arg1)->GetKey();
jresult = SWIG_csharp_string_callback((const char *)result);
return jresult;
}
今私はswigCPtr
使用してC#ラッパーから渡そうとしているのでcsWrapperPINVOKE.mdMUHybrid_GetKey(swigCPtr);
ここで、jarg1がswigCPtrから値を取得しているかどうかを確認したいと思います。
SWIGEXPORT char * SWIGSTDCALL CSharp_mdMUHybrid_GetKey(void * jarg1) {
char * jresult ;
mdMUHybrid *arg1 = (mdMUHybrid *) 0 ;
char *result = 0 ;
arg1 = (mdMUHybrid *)jarg1;
result = (char *)(arg1)->GetKey();
jresult = SWIG_csharp_string_callback((const char *)result);
return jresult;
}