我正在尝试学习如何使用VS2017 C#创建和注册COM DLL。 为此,我编写了测试代码:
using System;
using System.Runtime.InteropServices;
namespace ComObject1
{
[ProgId("ComObject1.ClassExample")]
[Guid("e514c7d2-ed6d-44c6-a7e2-36a272a8ba76")]
[ComVisible(true)]
public class ClassExample
{
[ComVisible(true)]
public string Mystring()
{
return "Hello, world!";
}
}
}
然后,我在regasm.exe中注册了我的DLL,并尝试在Excel中使用它:
Sub Test()
Dim testClass As New COM_Dll.ClassExample
Dim Res As String
Res = testClass.Mystring()
End Sub
很难过,但我有运行时
错误429(Activex组件无法创建对象)。
...因此,Excel“无法看到” Mystring()方法。我做错了什么? 附言当我将DLL作为类库(不是COM)添加到C#应用程序时,它可以正常工作:
var c = new ComObject1.ClassExample();
Console.WriteLine(c.Mystring());
现在,我(通过另一本手册)稍微更改了代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
namespace COM_Dll
{
[ComVisible(true)]
[Guid("4945B34B-1B63-4a58-B5FE-9627FEFAEA9D")]
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
public interface IInterface01
{
string Mystring(string s);
}
[ComVisible(true)]
[Guid("36E6BC94-308C-4952-84E6-109041990EF7")]
[ProgId("COM_Dll.CSCOMClass01")]
[ClassInterface(ClassInterfaceType.None)]
public class CSCOMClass01 : IInterface01
{
public string Mystring(string s)
{
return "test";
}
}
}
现在,我可以在EXCEL中添加方法Mystring(),但是如果运行宏,仍然会出现“错误429(Activex组件无法创建对象)”。
答案 0 :(得分:0)
问题与名称空间冲突。如果注册COM Dll,则应确信没有名称空间/类/签名冲突。如果使用“注册COM互操作注册”选项构建Dll,请务必小心-因为测试构建可能会在注册表中留下“垃圾箱”。