[英]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.