我正在使用第三方专有 DLL,我无法获得其源代码。但是,我可以使用似乎是使用 SWIG 1.3.39 自动生成的包装器代码。包装器代码包含一个 C++ 文件(使用一些描述 DLL 的头文件)编译为 DLL 和一个 C# 项目,该项目对 C++ 包装器 DLL 进行 PInvoke 调用。
我的项目解决方案中包含的那些 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;
}