Wyobrażam sobie, że mogę skompilować bibliotekę DLL w języku C#, a następnie odsłonić ją jako obiekt COM, aby mógł być obiektem CreateObject z VBscript. Po prostu nie jestem pewien, kroki związane z tym ...Jak wywołać kod .NET (C#/vb.net) z vbScript?
Odpowiedz
Może to być bardzo proste. Ale jest wiele miejsc, w których nie jest to takie proste. To zależy w dużej mierze od tego, co twoja klasa musi zrobić i od tego, jak zamierzasz ją wdrożyć.
Niektóre kwestie do rozważenia:
- Twoja klasa musi mieć konstruktora bez parametrów.
- Nie może ujawnić metod statycznych.
- Czy wdrażanie biblioteki DLL COM w globalnej pamięci podręcznej zespołu jest prawidłowe? Jeśli nie, musisz nadać mu silne imię i zarejestrować je przy użyciu
regasm /codebase
. - Czy obchodzi Cię, jakie identyfikatory GUID identyfikują klasę i jej interfejsy? Jeśli nie, możesz je przypisać, ale będą one za każdym razem inne (i każde miejsce) rejestrowane. Jeśli chcesz, aby identyfikatory GUID pozostały niezmienione w różnych instalacjach, musisz oznaczyć członków atrybutem
Guid
. - Czy zamierzasz używać domyślnego porządkowania typów danych między .NET i COM? Jeśli nie, będziesz musiał oznaczyć właściwości i metody atrybutem
MarshalAs
. - Czy to dla Ciebie ważne, jaki interfejs COM udostępnia Twoja klasa? Jeśli tak, będziesz musiał zająć się atrybutem
InterfaceType
. - Czy twoja klasa musi podnieść lub odpowiedzieć na zdarzenia? Jeśli tak, to mają wpływ na sposób projektowania interfejsu klasowego.
Istnieje bardzo dobry (jeśli przestarzały) artykuł o współdziałaniu z COM i .Net here. (Wiele rzeczy, o których mówi artykuł, takich jak generowanie bibliotek typów, jest teraz automatycznie przetwarzane.) I Microsoft's documentation jest aktualny, ale nie do końca tak szczegółowy.
Powinieneś użyć narzędzia regasm
, aby zarejestrować zespół (tak jak robisz regsvr32
z serwerami COM). Następnie możesz go użyć z COM. Upewnij się, że jest zainstalowany w GAC. Rzeczy powinny mieć [ComVisible(true)]
, aby można je było wykorzystać z COM.
Istnieje opcja "COM dostępne" dla każdego projektu, który można wybrać. Następnie, oczywiście, musisz zarejestrować zespół, aby go użyć, ale o to chodzi.
musiałem iść na polowanie trochę go znaleźć na C# (jestem przyzwyczajony do VB.Net), ale można znaleźć opcję, klikając dwukrotnie na folder w oknie Solution Explorer Properties
, wybierając zakładkę Application
, a następnie kliknięcie przycisku Assembly Information...
.