Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 调试VC++;从C调用6 DLL#_C#_Dll_Interop_Pinvoke - Fatal编程技术网

C# 调试VC++;从C调用6 DLL#

C# 调试VC++;从C调用6 DLL#,c#,dll,interop,pinvoke,C#,Dll,Interop,Pinvoke,我有一个用Visual Studio 6编写的旧DLL,我正在用Visual Studio 2010编写的C#调用它。DLL工作不正常,我想调试它。我该怎么做?我有一个源代码项目,但不知道如何进入它 注意:当我说“不工作”时,对DLL的调用会成功,在失败之前,它会稍微遍历DLL中的代码,但我想准确地跟踪到哪里。在.NET进程上附加VS6调试器应该可以工作,只要您有带有相应二进制文件和源的PDB文件。但是,您只能在DLL代码上中断 如果选中标志“允许非托管调试”,则附加另一个VS+将起作用,但调试

我有一个用Visual Studio 6编写的旧DLL,我正在用Visual Studio 2010编写的C#调用它。DLL工作不正常,我想调试它。我该怎么做?我有一个源代码项目,但不知道如何进入它


注意:当我说“不工作”时,对DLL的调用会成功,在失败之前,它会稍微遍历DLL中的代码,但我想准确地跟踪到哪里。

在.NET进程上附加VS6调试器应该可以工作,只要您有带有相应二进制文件和源的PDB文件。但是,您只能在DLL代码上中断


如果选中标志“允许非托管调试”,则附加另一个VS+将起作用,但调试器可能未加载符号。重新编译DLL将解决最后一个问题。

MSDN中描述了调试DLL的技术。您需要从Visual Studio 6(即开发DLL的工具)执行此操作,因此术语将发生更改。但是原则仍然是相同的。

< p>打开VisualC++ + DLL项目,在需要的地方设置断点。在“项目属性”、“调试”、“调试会话的可执行文件”中,键入使用此Dll的.NET可执行文件。开始调试(Go)。调用VC++函数时,调试器会中断。使用这种方式,您只能调试非托管VC++代码


另一种方法是以混合调试模式从.NET客户端开始调试。将VC++项目添加到解决方案中,并重新生成它以调试托管和非托管代码。

您已经尝试了哪些?例如,您是否尝试将VS6附加到调试?我尝试将VC6调试器附加到C#应用程序,但该进程未显示在Build->debug->attach to process中。我尝试将VC6调试器附加到.NET进程,但.NET进程(WinForms app)未显示在列表中。尝试将.NET project platform更改为x86,重新编译它,并重做操作。