我的C#库(.net 4.5.2)代码如下所示:
namespace HelloWorld
{
public class Hello
{
public string HelloUser(string name)
{
return "Hello, " + name;
}
}
}
我使用以下代码在AssemblyInfo.cs文件中显示了程序集COM:
[assembly: ComVisible(true)]
我通过Tools - > References在VBA代码中添加了对dll的引用,当在excel vba中尝试使用它时,我得到运行时错误:429(ActiveX组件无法创建对象) 。我的代码/电话有什么问题:
Excel VBA(2013)
Option Explicit
Sub tester()
Dim message As String
Dim User As String
User = "Ronnie"
Dim obj As New HelloWorld.Hello
message = obj.HelloUser(User)
End Sub
更新#3 更新了VBA代码但仍然没有成功。这次错误是:
Run-time error: 429 (ActiveX component can't create object)
答案 0 :(得分:3)
您的类没有公开COM的接口。您需要使用[Guid("some guid")]
属性装饰您的类,如果您希望能够将其与后期绑定一起使用,则为其提供[ProgId("Some.Id")]
,并正式描述成员公开方式的[ComDefaultInterface(typeof(IHelloWorld))]
:
[ComVisible(true)]
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
public interface IHelloWorld
{
string HelloUser(string name);
}
[ComVisible(true)]
[ComDefaultInterface(typeof(IHelloWorld))]
public class HelloWorld : IHelloWorld
{
public string HelloUser(string name)
{
return $"Hello, {name}.";
}
}