簡體   English   中英

一個簡單的C#DLL - 如何從Excel,Access,VBA,VB6中調用它?

[英]A Simple C# DLL - how do I call it from 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作為參考 - 但在瀏覽和選擇編譯的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! "; } }
}

項目屬性Build選項卡,選擇Register for COM interop。 所以你可以快速看到結果。 要在另一台計算機上安裝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選項卡,選擇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

但是 - 如果你想在另一台客戶端機器上使用你的dll,你將不得不使用regasm.exe - 在該機器上注冊程序集(dll)。

這可以通過命令行完成,

regasm.exe

在這種情況下

regasm.exe TestDll.dll

一旦您在新客戶端計算機上注冊了程序集,您就可以通過再次添加對其* .tlb的引用來訪問它

希望這可以幫助!

只是想評論一下,在Visual Studio 2008中,要獲取生成的.tlb文件,您還必須使用Application | 裝配信息並選擇“使裝配COM可見”。 花了一段時間才找到它,所以希望它能幫助別人。

要添加AnthonyWJones的好答案,您還需要使用Regasm.exe注冊您的DLL,它會添加必要的注冊表項。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM