如何调试被VB6/VBA应用程序调用的VS 2008 C# Express DLL?

4
我有一个C# DLL,它被编写成一个包装器,用于从数据源获取数据并将其传递给VBA/PowerPoint PPA应用程序。由于我对VBA没有太多经验,所以我正在使用我略微了解的VB6进行模拟。
目前我遇到了足够的问题,尝试理解COM和CCW的复杂工作原理及其语法等方面。因此,我正在寻找一种调试方法,以便查明该函数未返回任何数据的原因,并且如果可能的话,在VB6应用程序调用.NET DLL时逐行演练。
最初,我考虑在.NET DLL中放置一个函数,该函数将写入外部文件,但似乎不起作用,我不知道为什么。
通过一些谷歌搜索发现有一个“附加到进程”的功能,可能对我的情况有用,但该功能仅在VS Studio完整版本中可用
希望有其他工具或方法可供使用,以便我能够正确调试VB6 / VBA应用程序与.NET DLL之间发生的情况。谢谢。
4个回答

7
很遗憾,因为这是最好的方法,所以您无法附加到进程。
在.net dll中放置Debug.Assert(false);可以强制显示调试器。
您还可以尝试Debugger.Break();,这应该会强制断点并询问是否要附加调试器。 DebugDebugger都在System.Diagnostics命名空间中。

3
  1. 在Visual Studio中打开C#项目的项目属性。
  2. 进入调试页面。
  3. 选择“启动外部程序”,并浏览到VB.exe(很可能是C:\Program Files\Microsoft Visual Studio\VB98\VB6.EXE)。
  4. 可选:在命令行参数中输入您的VB6项目的.vbp文件路径。

当您运行C#项目(调试- >开始调试或F5)时,它将启动VB6。 您可以在C#项目中放置任何想要的断点。 当您启动VB6项目时,调试器将停止在VS2005/2008断点处。 您还可以使用即时窗口和任何其他调试选项,就像调试C#项目时一样。


@C-Pound Guru,在调试页面中,只有命令行参数和工作目录以及一个复选框来启用Visual Studio托管进程。因此,现在只需填写并运行它,我会得到一个输出类型为类库的项目...请向该解决方案添加一个可执行项目,该项目引用库项目。 :( - melaos
@melaos:对不起,是我搞错了。我正在运行完整版的Visual Studio。完整版使得Interop调试变得非常容易。不幸的是,Express版本没有这个功能。 - C-Pound Guru

2
添加这个
<StartAction>Program</StartAction>
<StartProgram>C:\Program Files\NUnit-Net-2.0 2.2.8\bin\nunit-gui.exe</StartProgram>

我在C# Express 2008项目的.csproj文件中,在PropertyGroup元素下进行了修改,这对我很有帮助。(详见此处)。


0

在 Visual C# Express Edition 的基础上下载并安装 Visual C++ Express Edition。两者都是完全免费的,这将使您能够在调试器中“附加到进程”。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接