gpt4 book ai didi

c# - 调试 com 可见 dll 托管代码

转载 作者:太空宇宙 更新时间:2023-11-03 20:39:38 24 4
gpt4 key购买 nike

我已经编写了一个 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");
}
}
}

Sign the assembly使用强键并注册为 COM 对象:

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 行上放置一个断点并运行应用程序。命中断点后打开 Modules Window (Ctrl+D M) 并确保已为 COM 程序集加载符号:

alt text

现在,如果您按 F11,您可以进入 COM 类进行调试。

备注:您也可以直接打开包含Foo类的.cs文件,直接在该处打断点。再次重要的是为程序集加载符号,或者当您放置断点时,Visual Studio 会告诉您不会命中此断点。

关于c# - 调试 com 可见 dll 托管代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3651824/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com