这是一个非常简单的设置,我简直不敢相信,但到目前为止我没有发现任何人遇到同样的问题......
在VS2010中创建.Net4类库。创建一个最简单的 COM 对象:
[ComVisible(true)]
[Guid("CD157EBC-C89D-40b6-B531-E85FF4B3AE9A")]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IAcorn
{
bool Foo(string moo);
}
[ComVisible(true)]
[ClassInterface(ClassInterfaceType.None)]
[Guid("854B7690-C1C4-40c4-8059-B4F3450B30D0")]
public class Acorn : IAcorn
{
public Acorn()
{
}
public bool Foo(string moo)
{
return true;
}
}
为程序集设置“注册 COM 互操作”选项。将“平台目标”设置为 x86。
使用Delphi创建一个Win32客户端,导入对象,使用正常实例化实例化它(翻译为
CoCreateInstance(ClassID, nil, CLSCTX_INPROC_SERVER 或
CLSCTX_LOCAL_SERVER,IUnknown,结果))
运行Win32应用程序,一切正常。
尝试从 VS2010 调试 COM 对象。设置类库的“调试”选项来启动外部程序,指向刚刚创建的可执行文件。当您从 VS210 启动 Win32 应用程序时,程序在尝试实例化 COM 时崩溃(使用 StackOverflow)。
将目标框架更改为.Net 3.5 从VS2010启动调试,一切正常,包括调试。
注意 - 使用 CLR 托管或非托管导出 COM 实例化时,这也是一个问题。这两种方法都适用于.Net4,但无法进行调试。
问题是标准的 - 为什么会发生这种情况?有解决方法吗?