deutschsprachige FoxPro User Group
Forum View
Home
  
  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.





Benedikt Seesing   10.09.2009 21:46
Christof Wollenhaupt  10.09.2009 23:18
Olaf Doschke  11.09.2009 10:21
Olaf Doschke  11.09.2009 17:08
Benedikt Seesing  15.09.2009 17:05
Olaf Doschke  16.09.2009 11:19
Benedikt Seesing  16.09.2009 16:46
Olaf Doschke  16.09.2009 22:37
Benedikt Seesing  16.09.2009 22:58
Benedikt Seesing  18.09.2009 12:31
  
zurück zum Forum