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- Datentypen nicht in LabVIEW vorhanden



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!

10.05.2011, 10:22
Beitrag #11

jak888 Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 133
Registriert seit: Apr 2010

2010
2010
en

97447
Deutschland
RE: DLL- Datentypen nicht in LabVIEW vorhanden
(09.05.2011 14:52 )rolfk schrieb:  Also im ursprünglichen C Code kommen die TCanFlags vor den TCanData. Also scheint mir da noch was falsch.
Oh, das hab ich irgendwie vertauscht. Ich habs jetzt richtig gestellt.

(09.05.2011 14:52 )rolfk schrieb:  Dann sollte man natürlich noch sicher sein dass die Structure by Reference übergeben wird, also als Pointer und nicht etwa by Value.

Will sagen der Functionsprototype sollte irgendwie so aussehen: something FunctionsName(..., TCanMeg *msg, ...);
So sieht mein Prototyp auch aus:
int32_t CanTransmit(uint32_t index, void *msg, int32_t count);

Dabei wird die msg scheinbar immer als pointer übergeben, unabhängig davon ob ich Handles by Value, Pointers to handles oder Array Data Pointer auswähle. Array Data Pointer scheidet wohl aus. Aber mit keiner Einstellung scheint es zu gehen...

"Good judgement comes from experience, experience comes from bad judgement."
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
11.05.2011, 11:35
Beitrag #12

rolfk Offline
LVF-Guru
*****


Beiträge: 2.306
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
RE: DLL- Datentypen nicht in LabVIEW vorhanden
(10.05.2011 10:22 )jak888 schrieb:  So sieht mein Prototyp auch aus:
int32_t CanTransmit(uint32_t index, void *msg, int32_t count);

Dabei wird die msg scheinbar immer als pointer übergeben, unabhängig davon ob ich Handles by Value, Pointers to handles oder Array Data Pointer auswähle. Array Data Pointer scheidet wohl aus. Aber mit keiner Einstellung scheint es zu gehen...

void * ist nicht gerade sehr deutlich. Gemäss C kann das so ein bischen alles sein. Aber gut nehmen wir an dass damit eigentlich TCanMsg *msg gemeint ist, was auch wahrscheinlich ist.

Wenn Du Adapt to Type machst, stellt sich LabVIEW automatisch auf den angeschlossenen Datentyp ein. Die Parameter Pointer to Handles oder Handles by Value sind dabei relevant wenn Du einen LabVIEW Handle Datentyp anschliesst, also einen String oder ein Array. Bei einem Cluster sind die irrelevant. Von der Call Library Node und dem Datencluster scheint nun alles in Ordnung zu sein. Wenns noch immer nicht funktioniert, kanns an ein paar Dingen liegen:

1) Einer der anderen Parameter zu der Funktion ist falsch
2) msg ist nicht wirklich eine TCanMsg structure, sondern etwas anderes. Da es als void Pointer deklariert ist gibt es keinerlei Weise das zu befestigen oder auszuschliessen. Das muss man aus der Dokumentation der Funktion herauslesen/raten/vermuten oder was auch immer.
3) Ein anderer Fehler verhindert dass diese Funktion gut ausgeführt werden kann.

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
23.05.2011, 14:45
Beitrag #13

jak888 Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 133
Registriert seit: Apr 2010

2010
2010
en

97447
Deutschland
RE: DLL- Datentypen nicht in LabVIEW vorhanden
Hallo,

nachdem ich ausgiebig an dem Thema weitergeforscht habe und auch noch mehrfach mit dem Hersteller Kontakt aufgenommen habe, hat sich dieser dazu bereit erklärt eine entsprechende LabVIEW kompatible Wrapper.dll zu schreiben. Nachdem der Hersteller diese fertig gestellt hatte, hat er die DLL in LabVIEW importiert, wobei ich auch nicht weiß wie, woraufhin LabVIEW ein SubVI für jede der DLL Funktionen erstellt hat.
Er hat den Teil, der für mich am wichtigsten war- nämlich das Senden von Can Messages- getestet. Der Teil hat bei ihm auch funktioniert.

Nun habe ich daraus zwar neue Hoffnung geschöpft, aber das Problem, dass nichts funktioniert, besteht weiterhin. Dabei drängt sich Frage natürlich auf: Warum?

Wenn ich den primitivsten Aufbau eines Programmes fahre, also Gerät öffnen und eine Nachricht senden, bekomme ich bei der Ausführung der CanTransmit Funktion folgende Fehlermeldung:

Error 1097 occurred at Call Library Function Node in labtcan.lvlib:LV Can Device Open.vi->Main.vi
Possible reason(s):

LabVIEW: An exception occurred within the external code called by a Call Library Function Node. The exception might have corrupted the LabVIEW memory. Save any work to a new location and restart LabVIEW.

Nun habe ich versucht den Programmordner zu verschieben, alles mittels save as... woanders hin zu sichern und auch einfach ein komplett neues Projekt anzufangen. Leider blieb alles ohne erfolg, der Fehler tritt weiterhin auf. Hat jemand eine Idee, wie ich das problem lösen könnte, bzw. was der Hersteller anders macht als ich?

Beste Grüße

"Good judgement comes from experience, experience comes from bad judgement."
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
23.05.2011, 16:23
Beitrag #14

jak888 Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 133
Registriert seit: Apr 2010

2010
2010
en

97447
Deutschland
RE: DLL- Datentypen nicht in LabVIEW vorhanden
So,

ich bin jetzt endlich mit dem Problem weitergekommen:

Ich bin davon ausgegangen, dass die LV Version des Herstellers eine andere war als meine. Er hat mir gegenüber einmal erwähnt, dass er mit LV wenig am Hut hätte, also wer weiß, woher er auf einmal die LV Version bekommen hatte. Ich nehme an, dass dadurch Kompatibilitätsprobleme entstanden sind.

Jedenfalls habe ich mein Problem wie folgt gelöst: Ich habe nicht die mitgelieferten VIs verwendet, sondern selbst neue VIs erstellt. Nachdem ich die wichtigsten VIs von Hand erstellt hatte, habe ich sie in einem Programm getestet und sie scheinen zu funktionieren. Genaueres kann ich aber vermutlich erst nächste Woche sagen, wenn ich wieder mit meinem geliebten MSO 4104B vereint bin.

Ich meld mich nochmal, wenn ich Software habe.

kann mir vielleicht trotzdem nochmal jemand erklären, wie man beim importieren von dlls gleich die SubVIs miterstellen lassen kann?

"Good judgement comes from experience, experience comes from bad judgement."
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
25.05.2011, 13:25
Beitrag #15

rolfk Offline
LVF-Guru
*****


Beiträge: 2.306
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
RE: DLL- Datentypen nicht in LabVIEW vorhanden
(23.05.2011 16:23 )jak888 schrieb:  kann mir vielleicht trotzdem nochmal jemand erklären, wie man beim importieren von dlls gleich die SubVIs miterstellen lassen kann?

Tools->Import->Shared Library (DLL).

Dieses Tool benötigt ein C Header File als Input. Es funktioniert gut für einfache Header Files mit nicht zu komplexen Funktionen und Datentypen, stolpert aber über einige komplexe C Deklarationen wie sie beispielsweise in den Standard WINAPI SDK Headers vorkommen und kann mit Funktionspointern überhaupt nicht umgehen, aber das ist durch die Call Library Node eh nicht unterstützt.

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
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  .dll nicht LabView kompatibel? virtualmake 5 6.418 10.09.2013 14:49
Letzter Beitrag: virtualmake
  DLL-Einbindung, Struct mit verschiedenen Datentypen als Pointer übergeben hawk72 4 11.107 11.05.2012 14:41
Letzter Beitrag: hawk72
  CRC Berechnung: Codebeispiel vorhanden Takuro 6 13.166 01.06.2011 17:17
Letzter Beitrag: Lucki
  pointer auf struct mit unterschiedlichen datentypen neven 8 7.849 27.11.2007 16:42
Letzter Beitrag: neven

Gehe zu: