我正在使用第三方專有DLL,但未提供源代碼。但是,似乎已經使用SWIG 1.3.39自動生成的包裝代碼對我來說是可用的。包裝器代碼由一個C++文件組成,該文件可以將DLL編譯成DLL(使用一些描述DLL的頭文件)以及一個使PInvoke調用C++包裝器DLL的C#項目。如何調試解決方案中包含的未經管理的C++代碼
那些C++項目,我已經包含在我的項目解決方案中,但是當我在C++代碼中設置斷點時,我永遠不會到達那裏。當我嘗試在C#中使用F11時,爲了進入C++函數,我得到了「Show Assembly」。
我有trie 解決方案>配置>配置proporties,但沒有找到任何選項來調試非託管/本機代碼。
編輯
包裝器的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;
}
現在由於我嘗試使用csWrapperPINVOKE.mdMUHybrid_GetKey(swigCPtr);
現在我想看看是否jarg1正從swigCPtr的值傳遞從C#包裝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;
}
如果您沒有源代碼,那麼在調試本機代碼時沒有多少意義。沒什麼可看的,但機器代碼,沒有什麼可以解決任何問題。聯繫供應商尋求支持。 –
@HansPassant,我有我的C++包裝代碼,我希望看到從C#傳遞的值實際上反映在包裝函數中。更新了代碼以供參考 – Simsons