一个简单的C#DLL - 如何从Excel,Access,VBA,VB6中调用它?

div*_*nci 38 c# vb6 dll excel interop

我有一个用c#编写的简单类库.

using System;
namespace TestDll
{
    public class Test
    {
        public string HelloWorld
        {
            get
            {
                return "Hello World";
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是如何从Microsoft Office Visual Basic(我认为是VB6)调用此HelloWorld函数?

我的第一步是添加DLL作为参考 - 但在浏览和选择编译的DLL时,消息"无法添加对指定文件的引用".被扔了.

任何人都可以指出我正确的方向为什么/如何让这个工作?

提前谢谢!

Ant*_*nes 54

您无法通过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! "; } }
}
Run Code Online (Sandbox Code Playgroud)

项目属性Build选项卡,选择Register for COM interop.所以你可以快速看到结果.要在另一台计算机上安装dll,您需要使用regasm.

然后消耗这个:

Dim o : Set o = CreateObject("TestDll.Test")
MsgBox o.HelloWorld
Run Code Online (Sandbox Code Playgroud)

您还可以引用dll并使用早期绑定:

Dim o As TestDll.Test
Set o = New TestDll.Text
MsgBox o.HelloWorld
Run Code Online (Sandbox Code Playgroud)


div*_*nci 23

并扩展在不同的计算机上注册DLL.

在开发机器上编译和构建上述代码后,如果有的话

项目属性Build选项卡,选择Register for COM interop.

您找到已编译的*.dll的Visual Studio输出文件夹(通常是bin\Debug)也将具有*.tlb文件.

此*.tlb文件是"类型库".并且客户端机器需要了解*.dll中的不同"类型"并基本上告诉客户端机器如何使用它.

通过设置上面的"注册COM互操作" - 以及正在生成的*.tlb文件,程序集(dll)在您的机器上注册,因此可以访问.

在VBA中,您现在可以添加此文件作为参考

VBA编辑器 - >工具 - >参考 - >浏览 - >选择

这将允许您声明库中找到的类.

Dim TestClass As Test
Set TestClass = New Test
MsgBox TestClass.HelloWorld
Run Code Online (Sandbox Code Playgroud)

但是 - 如果你想在另一台客户端机器上使用你的dll,你将不得不使用regasm.exe - 在该机器上注册程序集(dll).

这可以通过命令行完成,

regasm.exe

在这种情况下

regasm.exe TestDll.dll

一旦您在新客户端计算机上注册了程序集,您就可以通过再次添加对其*.tlb的引用来访问它

希望这可以帮助!


Jag*_*age 10

只是想评论一下,在Visual Studio 2008中,要获取生成的.tlb文件,您还必须使用Application | 装配信息并选择"使装配COM可见".花了一段时间才找到它,所以希望它能帮助别人.