Простая С# DLL - как мне ее назвать из Excel, Access, VBA, VB6?
У меня есть простая библиотека классов, написанная на С#.
using System;
namespace TestDll
{
public class Test
{
public string HelloWorld
{
get
{
return "Hello World";
}
}
}
}
Мой вопрос в том, как я могу вызвать эту функцию HelloWorld из Microsoft Visual Basic Visual Basic (что, я думаю, это VB6)?
Мой первый шаг состоял в том, чтобы добавить DLL в качестве ссылки, но при просмотре и выборе скомпилированной DLL появилось сообщение "Невозможно добавить ссылку на указанный файл". был брошен.
Может ли кто-нибудь указать мне в правильном направлении, почему и как это работает?
Заранее спасибо SO!
Ответы
Ответ 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! "; } }
}
Свойства проекта Вкладка 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
Ответ 2
И расшириться при регистрации DLL на разных компьютерах.
После компиляции и сборки вышеуказанного кода на вашей машине разработки, если у вас есть
Свойства проекта Вкладка Build, выберите Register for COM interop.
Ваша папка вывода Visual Studio (обычно bin\Debug), в которой скомпилирована скомпилированная *.dll, также будет иметь файл *.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
Надеюсь, это поможет!
Ответ 3
Просто хотел прокомментировать, что в Visual Studio 2008, чтобы получить .tlb файл сгенерированный, вы также должны перейти в приложение | Информация о сборке и выберите "Сделать сборку COM видимой". Потратил меня на то, чтобы найти это, поэтому надеюсь, что это поможет другим.
Ответ 4
Чтобы добавить к AnthonyWJones хороший ответ, вам также необходимо зарегистрировать свою DLL, используя Regasm.exe, который добавляет необходимые записи в реестр.