我有一个C#窗口应用程序,需要使用仅在C中提供的第三方API。为了解决此问题,我在VS2008中创建了三个项目:两个C#项目和一个空的C++项目。一个C#项目是我的“Wrapper”项目,仅负责生成调用C DLL的托管代码。另一个C#项目是窗口化的应用程序,它使用了Wrapper项目;我们称之为GUI项目。如何在从Visual Studio 2008中的C#应用程序调用时调试C DLL
在C++项目中,我创建了几个使用第三方API和导出(dllexport)适当函数的C文件(* .c)。我可以成功地将这个项目编译成一个DLL,并且在从我的Wrapper项目中调用这些函数时没有任何问题。如果它是相关的,我的Wrapper项目使用DllImport属性来引用这些函数。
我的C++项目有一个生成后事件,它将生成的DLL复制到我的GUI C#项目的输出目录中,以便它在执行时被拾取。这感觉有点严峻,但这是我想出如何做到这一点的唯一方法。我的GUI项目依赖于我的Wrapper项目,它依赖于C++项目。
然而,我正在努力做的是调试(即逐步)我的C项目代码。我试图在C代码中设置一个断点,希望它能在我的C#代码执行相关函数时被捕获。不幸的是,一旦我运行我的C#应用程序,IDE就会警告我将永远不会执行C断点:“没有为此文档加载符号。”
任何帮助,这将不胜感激。这里有一些我玩过的东西,但无济于事:
确保.pdb文件具有与DLL文件相同的时间戳。这个提示之后,随机谷歌建议“无符号”错误可能是由此造成的。
我在C#项目属性中选择了“启用非托管代码调试”。
我已经尝试在调用其中一个DLL方法之前在我的C#调用中设置一个断点,并试图进入DLL。这也不起作用,它只是跨过了功能。
你的意思是.pdb文件不是.pcb – 2010-10-13 07:45:11
我当然可以,已经编辑过。谢谢。 – 2010-10-13 07:49:36
您是否尝试加入C函数?它一直为我工作。 – leppie 2010-10-13 07:51:08