DirectCOM.dll mit withevents in VBA - Frage an Olaf

28/03/2010 - 16:07 von Wolfgang Bußmann | Report spam
Hallo Olaf,

ich beschàftige mich jetzt seit einigen Tagen mit der DirectCOM.dll und
habe hierzu noch eine Frage.

Wenn ich unter VB6 die DirectCOM.Dll benutzen möchte, kann ich auf dem
Entwicklungsrechner meine bereits kompilierte DLL mit withevents
benutzen (Early Binding). Auf anderen Rechnern wird im Programmcode
überprüft, ob meine DLL registriert ist. Wenn nicht, wird meine DLL über
folgenden Aufruf eingebunden. Set MyClass3 = GetInstance(App.Path & "\"
& "MultiDll1.DLL", "WBTestClass"). Bei diesem Modell wird im fertigen
Programm auf Ereignisse reagiert und ich kann beim Programmieren
Intellisense verwenden. Làuft alles super. Vielen Dank nochmal für deine
Arbeit.

Jetzt habe ich das Problem, dass ich meine DLL in ein VBA-Programm
einbinden möchte. Hier kann ich die folgende Zeile "Private withevents
MyClass3 As MultiDLL1.WBTestClass" natürlich nicht verwenden, da meine
DLL auf dem Rechner nicht registriert werden soll.

Private withevents MyClass3 As Object geht natürlich auch nicht. Jetzt
könnte ich ja noch auf Intellisene verzichten, jedoch möchte ich auch
auf Ereignisse reagieren können. Gibt es hierfür eine Lösung?

Gruß Wolfgang
 

Lesen sie die antworten

#1 Schmidt
29/03/2010 - 16:55 | Warnen spam
"Wolfgang Bußmann" schrieb im Newsbeitrag
news:%


Jetzt habe ich das Problem, dass ich meine DLL in ein
VBA-Programm einbinden möchte.


Ja, mit VBA ist das so eine Sache - WithEvents Deklarationen,
genau wie Intellisense erfordern eine "dem ausführenden Prozess
bekannt gemachte Typelib".
In der VB5/6-IDE, sowie den VB5/6 Kompilaten (wo die
Typelib-Infos dann mit eingelinkt werden) klappt das
mit regfree "gegen die Typelib" gezogenen Instanzen
dann zumeist problemlos.

Bei VBA kann man "wàhrend des Entwickelns" ebenfalls
eine entspr. Referenz auf die Dll setzen - da aber letztlich
kein "VBA-Binary" erzeugt wird, muss man auf jedem
Zielsystem dafür sorgen, dass die Dll-Typelib-infos der
jeweils laufenden VBA-hostenden Prozess-Instanz
"dynamisch bekanntgemacht werden".

Kenn mich mit VBA nicht so gut aus - und weiss nicht,
wie gut folgendes in der Praxis funktioniert:
Workbook.VBProject.References.AddFromFile ...

Weiss auch nicht, ob die obige Funktionalitàt am Ende
einen "richtigen Registriervorgang" in der Win-Registry
vornimmt (und falls ja in welchem Zweig, bzgl. Userrechten usw.) -
oder ob obige Zeile die Typelib-Infos nur für "dieses Workbook"
dynamisch làdt.

Müsstest Du mal ausprobieren und ein wenig rumspielen
damit - der "Namespace" Workbook.VBProject.References
hat auch noch ein paar mehr Methoden zu bieten...

Ansonsten bleibt nur der Weg über LateBinding
und per GetInstance gezogene Instanzen gegen:
"As Object"

Weiss jetzt nicht, wie "Event-Intensiv" Deine Dll-Klasse
daherkommt - möglicherweise reicht ja das Verpacken
in einen weiteren Class-Container (innerhalb derselben
Dll) - welcher dann intern Deine eigentliche Klasse (with
Events) hosted - und nach aussen ein "reduziertes, VBA-
latebound geeignetes Interface" anbietet.

Olaf

Ähnliche fragen