Einzelnen Beitrag anzeigen

andimx

Registriert seit: 14. Apr 2005
Ort: Hohenstein-Ernstthal
67 Beiträge
 
#1

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

  Alt 26. Jan 2007, 22:02
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
  Mit Zitat antworten Zitat