PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : COM Interface via C++ DLL in Teststand


D3fault
2019-02-09, 23:01:12
Hallo zusammen,

ich habe da mal eine Frage: Vielleicht hat jemand Erfahrung mit Objekt-Attributen aus einer C++ DLL welche in NI Teststand 17 geladen werden.


Folgernder Sachverhalt: Entwicklung einer DLL in C++ (Windows) welche einen ComPort aufmacht und dafür ein Handle erstellt. Dieses Handle wird automatisch im Constructor der C++ Klasse erstellt.

Eine als Export deklarierte Funktion beispiel "RS232_WriteData" greift darauf hin auf das erzeugte objekt zu und versendet die Daten.

Ein darauf folgender Wait und ein erneuter Aufruf von "RS232_WriteDate" haben zur Folge das ich das selbe Handle nicht wieder benutzen kann!

Hat jemand eine Idee wie ich das Objekt welches das handle beinhaltet während der gesamten Laufzeit in der die DLL geladen ist am leben halten kann??

Beste Grüße

Monger
2019-02-10, 19:53:07
Ohne Kenntnis deines Codes oder der Library kann ich nur vermuten dass eins von beiden nicht in Ordnung ist. Offenbar wird das Handle ja für dich überraschend geschlossen. Überraschungen sind immer schlecht.
Normalerweise geht sowas explizit: "Open" reserviert ne Ressource, "Close" gibt sie wieder frei. Das im Konstruktor zu machen, ist nicht unbedingt üblich. Du könntest natürlich jedes Mal ein neues Objekt holen, aber da wirste ja bekloppt.

Monger
2019-02-10, 20:00:14
Nachtrag: hab gerade erstmal NI Teststand gegoogelt. Testframeworks haben nochmal so ihre Spezialitäten. Wer weiß ob da nicht der Finalizer zu nem Zeitpunkt aufgerufen wird, den du nicht erwartest. Und da es in C++ auch noch drölf Millionen Arten gibt wie die Lebenszeit von Objekten gemanagt werden kann: keine Ahnung, ohne den Code zu sehen.

D3fault
2019-02-11, 20:32:21
Danke für die Infos :)

Haben aber das Problem behoben bekommen: In dem wir eine zwischen Schicht eingezogen haben.

Externe Function "RS232...." erzeugt ein Objekt aus Klasse A.

Klasse A erbt von Klasse B, und in Klasse B wird ein Globales Array angelegt welches zur gesamten Laufzeit der geladenen DLL gültig ist und auch bleibt ;)

Dieses ist wiederum direkt über das Objekt aus Klasse A ansprechbar und "handlebar" ^^ .

Vll. hilfts jemand anderem auch noch :D