Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi OPC/OLE/COM Problem mit Aufruf von Funktionen (https://www.delphipraxis.net/75282-opc-ole-com-problem-mit-aufruf-von-funktionen.html)

andimx 17. Aug 2006 00:21


OPC/OLE/COM Problem mit Aufruf von Funktionen
 
Hallo,

Wieder was neues :-)

Ich hab ein OPC Server entwickelt der jetzt sehr stabil läuft und keine Probleme mehr macht. Jetzt das Problem:

Der OPC Server ist ausgelagert und wird von einem Client angesteuert, der in einer DLL liegt. Die DLL exportiert eine Schreib- und Lesefunktion mit denen man Daten in den OPC schreiben/lesen kann.
Funktioniert auch alles bestens.. Aufruf Konvention beachtet, schreibe Daten rein und geht.

Jetzt kommt der Kluo!!!

Benutzt ich jetzt intern die Funktion zum schreiben, kommt ein EIntfCast Error - Schnittstelle wird nicht unterstützt.
Jetzt muss ich dazu sagen, das die Funktionen intern von einem Thread aufgerufen wird.

Nur wie kann es sein, das extern alles gut funktioniert und intern vom Thread aus die Funktion nicht erreichbar ist, bzw nicht richtig initialisert wird.

Bernhard Geyer 17. Aug 2006 10:13

Re: OPC/OLE/COM Problem mit Aufruf von Funktionen
 
Ich vermute mal das ich ein ähnliches Problem wie unter Aufruf eines OLE-Objektes aus einem Thread

andimx 17. Aug 2006 10:55

Re: OPC/OLE/COM Problem mit Aufruf von Funktionen
 
Oh Gott! :-)

Die Funktionen hab ich noch nie gehört. Muss ich den Server den initialiseren mit dem Objekt oder den Client?

Bernhard Geyer 17. Aug 2006 11:09

Re: OPC/OLE/COM Problem mit Aufruf von Funktionen
 
Immer wenn COM-Zeiger über Thread-Grenzen hinweg verwendet werden ist u.U. ein solches Marshaling nötig.

Wenn du sowas auf Client machst mußt du dies natürlich auf Clientseite marshallen.

andimx 17. Aug 2006 16:36

Re: OPC/OLE/COM Problem mit Aufruf von Funktionen
 
Hmm.. hab jetzt mal rumgeschaut. SO richtig bekomm ich keine Info's wie man ein Objekt Marshalt.

Wie kann man sich das vorstellen, einfach einen Zeiger oder Classe übergeben?

andimx 17. Aug 2006 16:55

Re: OPC/OLE/COM Problem mit Aufruf von Funktionen
 
Vielleicht hier nochmal eine genauerer Beschreibung:

Ich hab eine Basisklasse von der ich Ableite: TComInterface
Diese hat einige Standardfunktionen als "virtual; abstract" deklariert.

In einem z.B. TComInterfaceOPC = class(TComInterface) fülle ich die Funktionen aus.

In der Privat Sektion binde ich nun eine weitere Klasse ein, TrrOPCClient, die einen OPC Clienten auf COM Basis realsiert.

Ruf ich nun vom Hauptprogramm das die DLL geladen hat die Funktion TComInterfaceOPC.Write auf, dann ist alles gut, er schreibt die Daten in den OPC Namespace.
Ruf ich aber von einem WorkerThread in der DLL die Funktion TComInterfaceOPC.Write auf, dann gibts den Fehler (EIntfCastError).

Wo muss ich das Objekt den marschallen?

andimx 17. Aug 2006 17:30

Re: OPC/OLE/COM Problem mit Aufruf von Funktionen
 
Fehler gefunden:

CoInitializeEx(nil, COINIT_MULTITHREADED);

in Create vom Mainthread hat Abhilfe geschaffen ... tzz sowas blödes :-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:17 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz