我有C#编写的一个简单的类库。
using System;
namespace TestDll
{
public class Test
{
public string HelloWorld
{
get
{
return "Hello World";
}
}
}
}
我的问题是我怎么能叫从Microsoft Office的Visual Basic(我认为这是VB6)这个函数的HelloWorld?
我的第一个步骤是将DLL添加作为参考 - 但浏览和选择已编译的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! "; } }
}
该项目属性生成选项卡,选择注册为COM互操作。 所以,你可以很快看到结果。 你需要使用regasm另一台机器上安装的DLL。
然后,为了消耗这一点:
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。
一旦你编译和构建上面的代码在开发机器上,如果你有
该项目属性生成选项卡,选择注册为COM互操作。
在编译的* .dll发现也将有一个* .tlb文件的Visual Studio中的输出文件夹(通常斌\调试)。
这* .tlb文件是一个“类型库”。 并且需要由客户机,了解不同的“类型”在你的* .dll和基本上告诉客户机如何使用它。
通过设置上面的“注册为COM互操作” - 藏汉为被制作了* .tlb文件,装配(DLL)注册您的计算机上,因此是可访问的。
在VBA中,你可以将此文件添加,现在由一个参考
VBA编辑器 - >工具 - >引用 - >浏览 - >选择
这将允许你再声明在资料库中找到的类。
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文件生成的,你还必须在应用程序下,去| 大会信息,并选择“使大会COM可见”。 我花了一段时间才能发现,所以希望它可以帮助别人了。
为了增加AnthonyWJones的很好的答案,你还需要注册使用您的DLL Regasm.exe这增加了必要的注册表项。