2010-07-27 11 views
7

Mam bibliotekę klas napisaną w .Net, którą chciałbym udostępnić VB6/VBA. To, co próbowałem, nie zadziałało (oczywiście, gdy zadaję to pytanie). Oto, co zrobiłem:Tworzenie biblioteki DLL COM jest dostępne

  1. Utworzono projekt biblioteki klas w Visual Studio 2010 Express i umieść kod w module klasy.
  2. Otworzyłem właściwości projektu i przeszedłem do "Informacje o montażu" i zaznaczono "Make COM Visible".
  3. Poszedłem do opcji "Advanced Compile" i ukierunkowanego .Net 2.0 (to bardzo prosty kod).
  4. Następnie usunąłem wszystkie odniesienia oczekujące dla "System".
  5. Zbudowałem projektu (bez ostrzeżenia lub błędy) i skopiowane DLL poza folder Bin do katalogu C: \ Windows \ System32 \
  6. Pobiegłem regsvr32 zarejestrować DLL i dostaje błąd:

The module "MyDll.dll" was loaded but the entry-point DLLRegisterServer was not found.

Make sure that "MyDll.dll is a valid DLL or OCX file and then try again.

Oczywiście moja pierwsza próba była nieco naiwna. Czy ktoś może zaoferować wskazówki?

+2

Regsvr32 nie może być używany na zespołach .NET. Użyj 'regasm' i opcjonalnych argumentów - http://msdn.microsoft.com/en-us/library/tzat5yw6%28VS.71%29.aspx –

Odpowiedz

10

Krok nr 6 jest nieprawidłowy. Zespoły .NET z typami [ComVisible] są zarejestrowane w Regasm.exe. Użyj opcji wiersza poleceń/codebase, jeśli nie chcesz instalować biblioteki DLL w GAC. Opcja wiersza poleceń/tlb tworzy bibliotekę typów, której można użyć w projekcie VB6.

+0

Zrobiłem poszukiwanie pliku regasm.exe i wydaje się, że go brakuje. Czy jest to dostępne tylko z pełną wersją programu Visual Studio? Czy MS oferuje pobieranie (nadal googlowałem, ale myślałem, że możesz po prostu wiedzieć.) – Oorang

+2

Powinno być w katalogu c: \ windows \ microsoft.net \ framework \ v4.0.30319. Brakuje ci "Wiersza poleceń Visual Studio", aby było to łatwiejsze. Ale można to zrobić. –

+0

OK Znalazłem RegAsm i użyłem go. Stworzyło to tlb, o którym mógłbym wspomnieć. Kiedy otworzyłem go w VB6/VBA, brakowało wszystkich właściwości i metod. Czytając niektóre inne dostarczone linki, stwierdzam, że muszę stworzyć interfejs (coś, czego nie zrobiłem, właśnie stworzyłem klasę). Nadal dostosowuję interfejs, ale był to poważny krok. Dziękuję Ci. – Oorang

0

Jestem dość pewna, że ​​RegSvr32 działa tylko w bibliotece DLL innej niż .NET. Zespoły .NET są przechowywane w pamięci podręcznej Global Assembly Cache (GAC). Musisz uruchomić plik gacutil.exe.

+0

Umieszczanie ich w GAC nie jest konieczne. regasm z kluczem '/ codebase' będzie w porządku. – sharptooth

+0

@sharptooth: Dzięki {Thanks} Nie wiedziałem, że –

3

Będziesz musiał zdefiniować GUID dla swoich interfejsów i zaznaczyć, które klasy implementują które interfejsy, aby rozpocząć. MSDN ma numer getting started guide. Nie trzeba uruchomić regsvr32, ale trzeba postawić DLL gdzieś where the app can find it:

After registering an assembly using Regasm.exe, you can install it in the global assembly cache so that it can be activated from any COM client. If the assembly is only going to be activated by a single application, you can place it in that application's directory.

Jest to również dobry przegląd całego procesu here.

+0

+1 Dla linków. – Oorang

0

Użyj GacUtil zamiast RegSvr32. RegSvr jest używany dla bibliotek dll utworzonych za pomocą VB6, a dla bibliotek .NET DLL należy użyć GacUtil, ponieważ jest on dodawany do pamięci podręcznej zespołu globalnego.