一个简单的C#DLL - 我怎么把它从Excel和Access,VBA,VB6?(A Simple

2019-06-17 13:56发布

我有C#编写的一个简单的类库。

using System;
namespace TestDll
{
    public class Test
    {
        public string HelloWorld
        {
            get
            {
                return "Hello World";
            }
        }
    }
}

我的问题是我怎么能叫从Microsoft Office的Visual Basic(我认为这是VB6)这个函数的HelloWorld?

我的第一个步骤是将DLL添加作为参考 - 但浏览和选择已编译的DLL的消息“无法引用到指定的文件中添加”。 被抛出。

任何人都可以点我在正确的方向,为什么/如何得到这个工作?

提前感谢您!

Answer 1:

你无法通过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


Answer 2:

并扩大对注册在不同计算机上的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参考进行访问

希望这可以帮助!



Answer 3:

只是想评论说,在Visual Studio 2008中,获得.tlb文件生成的,你还必须在应用程序下,去| 大会信息,并选择“使大会COM可见”。 我花了一段时间才能发现,所以希望它可以帮助别人了。



Answer 4:

为了增加AnthonyWJones的很好的答案,你还需要注册使用您的DLL Regasm.exe这增加了必要的注册表项。



文章来源: A Simple C# DLL - how do I call it from Excel, Access, VBA, VB6?