![](/img/trans.png)
[英]Calling COM visible managed component from managed code through COM wrapper
[英]Debug com visible dll managed code
我已经编写了一个COM可见的dll,它将从本地Win32程序中调用。 为了进行调试,我向包含dll的解决方案中添加了一个简单的WinForms客户端。
现在,当我在dll中设置一个断点时,该断点会被命中,但我无法单步执行代码:调试器始终会跳转到dll中的下一个断点,或者会在调用之后跳转到客户端的第一行代码dll。
如何让调试器逐步执行dll代码?
我以为可能是“启用我的代码”选项,但是未设置。
更新 jdv建议在项目属性中设置“启用非托管代码调试”,但效果不理想。
谢谢,米尔。
以下是我执行的步骤,这些步骤使我能够成功调试作为COM组件公开的.NET程序集:
首先创建一个包含将作为COM对象公开的类的类库:
namespace COMTest
{
using System;
using System.Runtime.InteropServices;
public interface IFoo
{
void Bar();
}
[ComVisible(true)]
public class Foo : IFoo
{
public void Bar()
{
Console.WriteLine("Bar");
}
}
}
regasm.exe /codebase COMTest.dll
注册COM对象后,您可以在新的Visual Studio实例中创建一个新的控制台应用程序来测试COM对象:
class Program
{
static void Main()
{
var type = Type.GetTypeFromProgID("COMTest.Foo");
var instance = Activator.CreateInstance(type);
type.InvokeMember("Bar", BindingFlags.InvokeMethod, null, instance, new object[0]);
}
}
在InvokeMember
行上放置一个断点,然后运行该应用程序。 命中断点后,打开“ 模块窗口” ( Ctrl + DM ),并确保已为COM程序集加载符号:
现在,如果按F11键,则可以进入COM类进行调试。
备注:您也可以直接打开包含Foo
类的.cs文件,并直接在其中放置一个断点。 再次重要的是要为程序集加载符号,或者当您放置断点时,Visual Studio会告诉您不会遇到此断点。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.