Prosty C# DLL - jak to nazwać z Excel, Access, VBA, VB6?

Mam prostą bibliotekę klas napisaną w c#.

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

Moje pytanie brzmi, Jak mogę nazwać tę funkcję HelloWorld z Microsoft Office Visual Basic (który moim zdaniem jest VB6)?

Moim pierwszym krokiem było dodanie DLL jako odniesienia-ale podczas przeglądania i wybierania skompilowanej biblioteki DLL komunikat " nie można dodać odniesienia do określonego pliku."został wyrzucony.

Czy ktoś może wskazać mi właściwy kierunek, dlaczego / jak to uruchomić?

Z góry dzięki tak!

Author: divinci, 2009-07-23

4 answers

Nie możesz uzyskać dostępu do statycznego członka przez COM interop. W rzeczywistości Twój kod nawet się nie kompiluje, metoda powinna być w klasie. Oto jak możesz to zrobić:

[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! "; } }
}

W zakładce Właściwości projektu wybierz Zarejestruj się dla COM interop. Więc można zobaczyć wyniki szybko. Aby zainstalować dll na innym komputerze, musisz użyć regasm.

Aby następnie skonsumować to:

Dim o : Set o = CreateObject("TestDll.Test")
MsgBox o.HelloWorld

Możesz również odwołać się do dll i użyć wczesnego wiązania:

Dim o As TestDll.Test
Set o = New TestDll.Text
MsgBox o.HelloWorld
 48
Author: AnthonyWJones,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-02 09:52:56

I rozszerzyć o rejestrowanie DLL na różnych komputerach.

Po skompilowaniu i zbudowaniu powyższego kodu na swojej maszynie programistycznej, jeśli masz

W zakładce Właściwości projektu wybierz Zarejestruj się dla COM interop.

Twój folder wyjściowy Visual Studio (Zwykle bin\Debug), w którym skompilowano*.dll zostanie znaleziony będzie również mieć *.plik tlb.

To *.plik tlb jest biblioteką typu. I jest potrzebny maszynie klienta, aby zrozumieć różne "Typy" w twoim *.dll i w zasadzie powiedzieć maszynie klienckiej, jak z niej korzystać.

Poprzez ustawienie powyższej 'Register for COM interop' -- aswell as a*.plik tlb jest produkowany, zespół (dll) jest zarejestrowany na komputerze, a zatem jest dostępny.

W VBA możesz teraz dodać ten plik jako odniesienie przez

VBA Editor -> Tools -> Reference -> Browse -> Select

To pozwoli Ci zadeklarować klasy Znalezione w Twoim biblioteka.

Dim TestClass As Test
Set TestClass = New Test
MsgBox TestClass.HelloWorld

Jednakże - jeśli chcesz użyć dll na innym komputerze klienckim, będziesz musiał użyć regasm.exe-aby zarejestrować zespół (dll) na tej maszynie.

Można to zrobić za pomocą linii poleceń,

Regasm.exe

W tym przypadku

Regasm.exe TestDll.dll

Po zarejestrowaniu zestawu na nowej maszynie klienckiej, będziesz mógł uzyskać do niego dostęp, ponownie dodając odniesienie do jego *.tlb

Mam nadzieję, że to pomoże!
 19
Author: divinci,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-23 11:46:50

Chciałem tylko skomentować, że w Visual Studio 2008, aby uzyskać .wygenerowany plik tlb należy również przejść pod informacje o aplikacji / montażu i wybrać "Make Assembly COM visible". Trochę mi to zajęło, więc mam nadzieję, że to pomoże innym.

 6
Author: Jage,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-12-23 13:51:41

Aby dodać dobrą odpowiedź AnthonyWJones, musisz również zarejestrować DLL za pomocą Regasm.exe , który dodaje niezbędne wpisy rejestru.

 0
Author: Matthew Dresser,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-23 10:33:28