INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

DLL mit BSTR-Variable einbinden



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

03.08.2009, 13:43
Beitrag #1

knomic Offline
LVF-Neueinsteiger


Beiträge: 6
Registriert seit: Aug 2009

9
2008
en

90763
Deutschland
DLL mit BSTR-Variable einbinden
Hallo liebe Forengemeinde,

im Zuge meiner Diplomarbeit muss ich mich jetzt etwas intensiver mit LabVIEW auseinandersetzen.
Es soll dabei ein digitaler Messschieber über ein USB-Interface ausgelesen werden. Als Interface verwende ich die USB-Box von http://www.caliper2pc.de.
Es wird ein kleines Softwarepaket mitgeliefert, welches auch eine DLL enthält, welche ich jetzt in LabVIEW implementieren möchte.
Doch leider funktioniert das ganze nicht so reibungslos, wie ich mir das vorgestellt habe und LabVIEW bricht immer mit einem Fehler 1097 ab, egal welche Aufrufkonventionen ich verwende, bzw. welche Rückgabeparamter.
Ich stehe mit dem Entwickler in sehr engem Mailkontakt, doch leider kann er mir keinen Support für LabVIEW geben, da er von LabVIEW keine Ahnung hat.
Bisher habe ich jedoch in Erfahrung bringen können, dass die DLL wohl in Visual C++ geschrieben wurde und die Returntypen der für mich interessanten Funktionen (GetChannel) BSTR ist.
Nun habe ich schon in etlichen Foren zum Thema BSTR und Labvie gelesen, aber keinen wirklich hilfreichen Tipp gefunden.
Gibt es eventuell die Möglichkeit eines der Beispielprogramme (C# oder VB) direkt in LabVIEW zu implementieren?
Oder gibt es doch einen Kniff, wie ich die DLL mit Ihren Ecken und Kanten (?) in LabVIEW verwenden kann?
Ich freu mich auf eure Hilfe.

Liebe Grüße

Micha


Lv86_img


Angehängte Datei(en)
Sonstige .zip  Caliper2PC_api.zip (Größe: 1,09 MB / Downloads: 177)

Sonstige .vi  basictest.vi (Größe: 6,58 KB / Downloads: 208)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
03.08.2009, 14:53 (Dieser Beitrag wurde zuletzt bearbeitet: 03.08.2009 14:54 von rolfk.)
Beitrag #2

rolfk Offline
LVF-Guru
*****


Beiträge: 2.302
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
DLL mit BSTR-Variable einbinden
Liest Du Dich mal hier duch. Die darin vorgestellte LabvIEW Library kann auch BSTR erzeugen.

Rolf Kalbermatter

Rolf Kalbermatter
Technische Universität Delft, Dienst Elektronik und Mechanik
https://blog.kalbermatter.nl
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
04.08.2009, 08:24
Beitrag #3

knomic Offline
LVF-Neueinsteiger


Beiträge: 6
Registriert seit: Aug 2009

9
2008
en

90763
Deutschland
DLL mit BSTR-Variable einbinden
Hallo Rolf,

danke für deine Antwort. Durch den von dir genannten Beitrag hatte ich mich auch schon durchgewühlt, doch leider hab ich noch nicht verstanden, in wiefern mir deine Bibliothek weiterhelfen kann. Denn scheinbar gibt es bereits ein Problem, wenn der DLL-Knoten versucht auf die DLL zuzugreifen, da es mit fehlerhaften Parametern passiert.
Oder soll ich einen CString ausgeben lassen und den dann mit deiner Bibliothek umwandeln? Das würde jeglicher Logik, die ich bisher verwendet habe, widersprechen.

Grüße

Micha
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
04.08.2009, 08:33
Beitrag #4

abrissbirne Offline
LVF-Stammgast
***


Beiträge: 480
Registriert seit: Aug 2007

LV2009, LV2010
2007
EN

66123
Deutschland
DLL mit BSTR-Variable einbinden
' schrieb:Hallo Rolf,

danke für deine Antwort. Durch den von dir genannten Beitrag hatte ich mich auch schon durchgewühlt, doch leider hab ich noch nicht verstanden, in wiefern mir deine Bibliothek weiterhelfen kann. Denn scheinbar gibt es bereits ein Problem, wenn der DLL-Knoten versucht auf die DLL zuzugreifen, da es mit fehlerhaften Parametern passiert.
Oder soll ich einen CString ausgeben lassen und den dann mit deiner Bibliothek umwandeln? Das würde jeglicher Logik, die ich bisher verwendet habe, widersprechen.

Grüße

Micha
Kannst dir auch eine wrapper DLL schreiben. Diese ruft deine Funktionen der mitgelieferten DLL auf und verarbeitet die Rückgabewerte so, dass du sie in LV ohne Probleme auslesen kannst. Dafür gibt es String Conversation Macros String Conversation.

abrissbirne
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
04.08.2009, 09:55 (Dieser Beitrag wurde zuletzt bearbeitet: 04.08.2009 10:09 von rolfk.)
Beitrag #5

rolfk Offline
LVF-Guru
*****


Beiträge: 2.302
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
DLL mit BSTR-Variable einbinden
' schrieb:Hallo Rolf,

danke für deine Antwort. Durch den von dir genannten Beitrag hatte ich mich auch schon durchgewühlt, doch leider hab ich noch nicht verstanden, in wiefern mir deine Bibliothek weiterhelfen kann. Denn scheinbar gibt es bereits ein Problem, wenn der DLL-Knoten versucht auf die DLL zuzugreifen, da es mit fehlerhaften Parametern passiert.
Oder soll ich einen CString ausgeben lassen und den dann mit deiner Bibliothek umwandeln? Das würde jeglicher Logik, die ich bisher verwendet habe, widersprechen.

Grüße

Micha

Also als Returnwert der Funktion wird sie den String ja selber anlegen. Den musst Du daher als Pointer sized Integer (32bit unsigned Integer in pre LabVIEW 8.6) definieren.

Danach kannst Du mit der Funktion "Convert UTF16 Pointer to ASCII.vi" den String daraus auslesen. Zuletzt nicht vergessen den Poiner mit "Deallocate BSTR Pointer.vi" wieder freizugeben. Sonst müllst Du dir den Speicher sehr schnell voll. Big Grin

Rolf Kalbermatter

Rolf Kalbermatter
Technische Universität Delft, Dienst Elektronik und Mechanik
https://blog.kalbermatter.nl
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
04.08.2009, 13:20
Beitrag #6

knomic Offline
LVF-Neueinsteiger


Beiträge: 6
Registriert seit: Aug 2009

9
2008
en

90763
Deutschland
DLL mit BSTR-Variable einbinden
Danke ihr beiden,

eine Wrapper-DLL wollte ich vermeiden, aber so wie es ausschaut, scheint das ganze nicht annähernd so komfortable zu funktionieren, wie ich mir das vorgestellt hatte, abgesehn von den LabVIEW-Problemen.

Habe ich das richtig verstanden, dass die DLL wahrscheinlich nur einen Pointer liefert und dieser Pointer dann in der Bibliothek von Rolf in einen String umgewandelt wird. Das heißt also, dass die zur Verfügung gestellte Bibliothek, bzw. deren Konverter, nichts anderes machen, als auf den Speicherbereich zuzugreifen, auf den der Zeiger zeigt und den Inhalt dann in einen ASCII-Code umwandeln?

Nunja, ich hab mal versucht das ganze in meinem Minimalbeispiel zu integrieren, doch leider ändert das überhaupt nichts an der Fehlermeldung 1097, diese scheint also durch etwas anderes verursacht zu werden.

Vielleicht habe ich aber auch etwas falsch aufgebaut, es wäre schön, wenn Ihr mal drüberschauen könntet. Eventuell fällt euch ja noch eine andere Lösung ein?!

Grüße

Micha

Lv86_img


Angehängte Datei(en)
Sonstige .vi  basictest.vi (Größe: 11,3 KB / Downloads: 199)

Sonstige .llb  Unicode.llb (Größe: 239,14 KB / Downloads: 197)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
04.08.2009, 22:31
Beitrag #7

rolfk Offline
LVF-Guru
*****


Beiträge: 2.302
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
DLL mit BSTR-Variable einbinden
Ich würde die Calling Convention mal auf stdcall setzen. Da es eine Windows/VB DLL zu sein scheint ist stdcall (Standard Call) normalerweise der Standard.

Rolf Kalbermatter

Rolf Kalbermatter
Technische Universität Delft, Dienst Elektronik und Mechanik
https://blog.kalbermatter.nl
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
06.08.2009, 17:47
Beitrag #8

knomic Offline
LVF-Neueinsteiger


Beiträge: 6
Registriert seit: Aug 2009

9
2008
en

90763
Deutschland
DLL mit BSTR-Variable einbinden
Ich habe mir jetzt eine Wrapper-Dll in C# geschrieben und das funktioniert nach ein paar kleineren Problemen auf Rechnern ohne .NET-SDK auch ganz gut.
Sollte Interesse an dem Quellcode der Wrapper-Dll bestehen, dann geb ich den auch gern bekannt.

Die Sache mit der Bibliothek hat leider nur mäßig funktioniert. Entweder habe ich einen Error bekommen, oder wenn es lief, dann hat er mir lustige Zeichen in dem String-Feld angezeigt, aber nicht das, was er sollteSmile!

Ich dank euch erstmal für die Hilfe und werde mich im Zuge meiner Diplomarbeit sicher nochmal melden.

Bis dahin!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Gehe zu: