Подтвердить что ты не робот

Простая С# 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!

4b9b3361

Ответ 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, который добавляет необходимые записи в реестр.