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 [COM/DLL] COM Objekt aus Delphi DLL in VB nicht sichtbar (https://www.delphipraxis.net/85167-%5Bcom-dll%5D-com-objekt-aus-delphi-dll-vbulletin-nicht-sichtbar.html)

andimx 26. Jan 2007 21:02


[COM/DLL] COM Objekt aus Delphi DLL in VB nicht sichtbar
 
Hallo alle zusammen,

Ich bin wieder auf ein Mysterium der Com-Programmierung gestoßen.

Ich hab in Delphi eine DLL geschrieben, in der 5 Threads erstellt werden. Dies sind 5 Workthreads in denen verschiedenen Kommunikationsprotokolle abgearbeitet werden.

Nun gibt es auch eine Wrapper Klasse die unterschiedliche Kommunikationen zuläßt, sprich es gibt eine Basisklasse und dann x Ableitungen, u.a. eine XML über TCP/IP KLasse, eine reine TCP/IP Klasse und eben auch eine Klasse um OPC zu betreiben. Die Klasse OPC generiert nun das OPC COM Objekt und wenn ich die DLL in einem Delphi Programm einbinde, laufen die Threads und alles drum und dran funktioniert.

Jetzt gibt es aber nicht nur Delphi sondern auch VB, LabView, etc... im aktuellen Problemfall haben wir genau diese beiden.

Die DLL läßt sich perfekt in LabView wie auch in VB laden und man kann den VersionString ziehen, etc.. auch kann man werte in den OPC Namespace reinschreiben und alles funktioniert tadelos, bis auf folgendes:

Die Threads in der DLL steuern natürlich auch die "WriteItem" funktion an (so heißt die Funktion in der DLL um Werte in den Namespace zu schreiben). Wird WriteItem von der Delph, VB oder LabView Applikation aufgerufen, funktioniert es.. wird die DLL jetzt aber in VB oder in Labview eingebunden und wird die Funktion aber von einem der WorkerThreads in der DLL aufegrufen.. schwupp.. ist das COM Objekt nicht mehr sichtbar, sprich es gibt es nicht mehr.

Jeder der einzelnen Threads werden übrigends initialisert mit:
[delphi]
CoInitializeEx(nil, COINIT_MULTITHREADED);
[delphi/]

Das hat mich schonmal 4 Monate gekostet, nach dem das drin war, lief alles. Nur läuft es halt nicht in VB oder in LabView.... das OPC COM Objekt ist einfach nicht sichtbar.

Kennt jemand das Problem das COM Objekte in DLL's nicht mehr für die DLL selbst sichtbar sind, sondern nur im Context der Hostapplikation da sind.


Grüße
Andi

Olli 27. Jan 2007 19:21

Re: [COM/DLL] COM Objekt aus Delphi DLL in VB nicht sichtbar
 
Zitat:

Zitat von andimx
Das hat mich schonmal 4 Monate gekostet, nach dem das drin war, lief alles. Nur läuft es halt nicht in VB oder in LabView.... das OPC COM Objekt ist einfach nicht sichtbar.

Nicht sichtbar in der Liste verfügbarer COM-Klassen? Dann versuche mal "regsvr32 <dllname>".

Zitat:

Zitat von andimx
Kennt jemand das Problem das COM Objekte in DLL's nicht mehr für die DLL selbst sichtbar sind, sondern nur im Context der Hostapplikation da sind.

Eine DLL besitzt ja auch keine Threads, kann also logischerweise keine COM-Klassen intanziieren und ergo auch keine "sehen".


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:22 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