![]() |
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. |
Re: OPC/OLE/COM Problem mit Aufruf von Funktionen
Ich vermute mal das ich ein ähnliches Problem wie unter
![]() |
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? |
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. |
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? |
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? |
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 06:14 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz