|
|
Re: 32bit DLL kann nicht geladen werden- #12574 in section [722666] |
Sec: |
(51) MS-Visual FoxPro 9.0 |
Von: |
Olaf Doschke |
An: |
Benedikt Seesing |
Am/Um: |
16.09.2009 11:19:23 gelesen |
--from Newsreader at Mittwoch, 16. September 2009; 11:19:23-- Hallo Benedikt, Damit hast Du einen Eventhandler programmiert, wenn Du ein Interface aus dem Object Browser in ein leeres PRG "Benedikt Seesing" schrieb im Newsbeitrag news:722643... > Hallo Olaf, > > Ich ziehe aus dem ObjectBrowser aus "interfaces" einfach die Struktur in > ein prg-file Damit hast Du einen Eventhandler programmiert. Ich denke Du bist auf den Holzweg geführt worden, Du brauchst keinen Eventhandler, Du brauchst das COM Object aus der Assembly DLL, das für sich allein funktioniert. Ein Eventhandler zu einem Interface ist etwas, das Du nur brauchst, wenn es überhaupt Events gibt, auf die Du reagieren möchtest. Dazu bräuchtest Du dann a) das COM Objekt, was die Events auslöst, b) eine Instanz Deiner Klasse, die das Interface des COM Objektes implementiert (das bewirkt die IMPLEMENTS-Klausel im prg) und c) ein EVENTHANDLER()-Aufruf, um die beiden COM- und VFP-Objekte miteinander zu verbinden. Anhand Excel wird das vielleicht klar: Du kannst im Object Browser die Microsoft Excel Object Library wählen und findest dann unter Interfaces "AppEvents". Das in ein prg gezogen ermöglicht Dir Code zu schreiben, der dann bei Events wie z.B. "NewWorkBook" etc. abläuft, also darauf zu reagieren, was in Excel passiert. Eine Interface Implementation ist aber ungeeignet, um aktiv mit einem COM-Server zu arbeiten, sie reagiert auf Events, sie löst nichts aus oder nutzt keine Funktionen/Methoden des zugehörigen COM-Servers. Wenn Du Excel fernsteuerst und nutzt, instanzierst Du typischerweise Excel.Application und rufst dann WorkBooks.Add() auf, Du wartest nicht darauf, daß ein Nutzer in Excel ein neues Workbook erstellt, um darauf zu reagieren. Wenn Du schon im Object Browser das Assembly gefunden hast, dann war regasm erfolgreich und Du brauchst jetzt nur noch den COM Server/OLE Klassennamen des Assemblies. Wie Du anhand der Excel LIbrary siehst gibt es zum Hauptknoten Excel z.B. die Klasse Application. Daran kannst Du ablesen, wie sich der COM-Name zusammensetzt: Excel.Application. Das mußt Du dann per CREATEOBJECT() instanzieren. Dann hilft schon Intellisense weiter zu sehen, was der COM Wrapper um die .NET Assembly so alles bietet. Tschüß, Olaf.
|
|
|
|