一个简单的C#DLL – 我如何从Excel,Access,VBA,VB6中调用它?
我有一个简单的类库用C#编写。
using System; namespace TestDll { public class Test { public string HelloWorld { get { return "Hello World"; } } } }
我的问题是如何从Microsoft Office Visual Basic(我认为是VB6)调用这个HelloWorld函数?
我的第一步是添加DLL作为参考 – 但在浏览和select编译的DLL消息“无法添加对指定文件的引用”。 被抛出
任何人都可以指出我正确的方向为什么/如何得到这个工作?
在此先感谢!
您不能通过COM互操作访问静态成员。 实际上你的代码甚至没有编译,方法应该是在一个类。 这里是你如何做到这一点:
[InterfaceType(ComInterfaceType.InterfaceIsDual)] [Guid("01A31113-9353-44cc-A1F4-C6F1210E4B30")] //Allocate your own GUID public interface _Test { string HelloWorld { get; } } [ClassInterface(ClassInterfaceType.None)] [Guid("E2F07CD4-CE73-4102-B35D-119362624C47")] //Allocate your own GUID [ProgId("TestDll.Test")] public class Test : _Test { public string HelloWorld { get { return "Hello, World! "; } } }
在项目属性“生成”选项卡中,select“注册为COM互操作”。 所以你可以很快看到结果。 要在另一台机器上安装DLL,您需要使用regasm。
然后消耗这个:
Dim o : Set o = CreateObject("TestDll.Test") MsgBox o.HelloWorld
你也可以引用dll并使用早期绑定:
Dim o As TestDll.Test Set o = New TestDll.Text MsgBox o.HelloWorld
并扩展在不同的计算机上注册DLL。
一旦你在你的开发机器上编译和构build上面的代码,如果你有的话
在项目属性“生成”选项卡中,select“注册为COM互操作”。
您的Visual Studio输出文件夹(通常是bin \ Debug)find编译的* .dll也将有一个* .tlb文件。
这个* .tlb文件是一个'types库'。 客户端机器需要理解* .dll中的不同“types”,并基本告诉客户机如何使用它。
通过设置上面的“注册COM互操作” – 以及正在生成的* .tlb文件,程序集(dll)在您的机器上注册,因此可以访问。
在VBA中你现在可以通过添加这个文件作为参考
VBA编辑器 – >工具 – >参考 – >浏览 – >select
这将允许您然后声明在您的图书馆find的类。
Dim TestClass As Test Set TestClass = New Test MsgBox TestClass.HelloWorld
然而,如果你想在不同的客户端机器上使用你的DLL,你将不得不使用regasm.exe – 在该机器上注册程序集(dll)。
这可以通过命令行完成,
regasm.exe
在这种情况下
regasm.exe TestDll.dll
一旦你在新的客户端机器上注册了程序集,你将可以通过再次添加对* .tlb的引用来访问它
希望这可以帮助!
只是想在Visual Studio 2008中发表评论,为了得到生成的.tlb文件,您还必须在Application |下进行 组装信息并select“使组装COM可见”。 花了我一段时间才发现,所以希望它能帮助别人。
要添加到AnthonyWJones的良好答案,您还需要使用Regasm.exe注册您的DLL, Regasm.exe将添加必要的registry项。