Hallo zusammen,
ich habe mal wieder eine Frage bzgl. der Einbindung einer .dll. Ich möchte mit einer Funktion aus einer .dll eine Config. Datei downloaden. Leider weiss ich jetzt nicht genau, was ich für Datentypen für "pabFileData", und "pvUser" verwenden muss und in der dll einstellen muss.
Kann mir da vllt. jemand auf die Sprünge helfen? Ich habe mal ein Screenshot der dll hinzugefügt.
Gruß
raverel
(10.07.2013 13:04 )raverel schrieb: [ -> ]Hallo zusammen,
ich habe mal wieder eine Frage bzgl. der Einbindung einer .dll. Ich möchte mit einer Funktion aus einer .dll eine Config. Datei downloaden. Leider weiss ich jetzt nicht genau, was ich für Datentypen für "pabFileData", und "pvUser" verwenden muss und in der dll einstellen muss.
Kann mir da vllt. jemand auf die Sprünge helfen? Ich habe mal ein Screenshot der dll hinzugefügt.
Gruß
raverel
pabFileData ist ein Array von unsinged 8 bit Integers passed as C Array Pointer. ulFileSize ist wahrscheinlich die Anzahl Bytes in diesem Array.
pvUser ist ein Pointer Sized Integer der irgendwas enthalten kann was die Callback Routine interpretieren kann.
Aber!!!!
pfnCallback und pfnRecvPktCallback sind Callback Function Pointers und das geht mit der CLN nicht (sinnvoll)! Theoretisch kann man da zwar was auf LabVIEW Diagramm Ebene basteln aber das Resultat erfordert ungefähr 10 mal mehr Low Level C Kenntnisse als in C eine entsprechende Wrapper DLL zu entwickeln die das Ganze in User Events oder so umwandelt und das ist auch schon Advanced Programming. Auch wäre eine Implementation nur auf dem LabVIEW Diagramm ein katastrophaler Maintenance Alptraum.
Wenn diese Funktion also nicht unterstützt, dass man sie mit NULL Werten für die zwei pfn Parameter aufrufen kann, musst Du wohl oder übel einen C Compiler anwerfen um einen Wrapper zu schreiben. Oder den Support der Treiber DLL solange plagen bis sie Dir einen solchen Wrapper machen, oder jemanden mit guten C und LabVIEW Kenntnissen anheuern der diese Wrapper DLL für Dich macht.
Ok.
Ich habe mir jetzt ein VI erstellt. Das eine Datei in meinen Kommunikationskanal laden soll.
Doch ich bekomme immer einen Crash Report und LabView stürzt ab und leider steht im "View Report" nichts nützliches drin.
Die anderen 4 Sub-VI`s sind dazu da, die Driver Funktionen zu öffnen und zu schließen und den Kommunitionskanal zu öffnen und zu schließen.
Vielen Dank
raverel
(12.07.2013 13:37 )raverel schrieb: [ -> ]Ok.
Ich habe mir jetzt ein VI erstellt. Das eine Datei in meinen Kommunikationskanal laden soll.
Doch ich bekomme immer einen Crash Report und LabView stürzt ab und leider steht im "View Report" nichts nützliches drin.
Die anderen 4 Sub-VI`s sind dazu da, die Driver Funktionen zu öffnen und zu schließen und den Kommunitionskanal zu öffnen und zu schließen.
Vielen Dank
raverel
Näturlich muss das crashen. Du übergibst zwar NULL an die Callbackfunctionsparameter aber hast die als "Passed by Reference" konfiguriert. Damit ist nicht der Pointer selber NULL. Die Funktion sieht einen Pointer ungleich NULL und konkludiert, dass das ein Callbackfunctionpointer sein muss und ruft ihn verfolgens freudig auf. Aber da ist kein Callback sondern nur eine Speicheraddresse wo irgendwann mal NULL drin stand.
Mach die zwei pfn Parameter als "Pass: Value" und es sollte gehen.
Ok Vielen Dank.
LabView stürtzt nun nicht mehr ab.
Hab dazu nun noch eine abschließende Frage, da die Daten nicht in meinen Kommunikations Channel geladen werden.
Ich bin mir nicht 100%-ig sicher, ob ich dass so richtig mit den Parameter pabFileData gemacht habe.
Habe das Argument in dem CLF als uint8 Array Data Pointer deklariert.
Als Übergabeparameter habe ich diesem Argument ein Bytearray übergeben, welches ich vorher aus einem String umgewandelt habe. In diesem String lesen ich aus dem Pfad alle Daten ein.
(15.07.2013 09:36 )raverel schrieb: [ -> ]Ok Vielen Dank.
LabView stürtzt nun nicht mehr ab.
Hab dazu nun noch eine abschließende Frage, da die Daten nicht in meinen Kommunikations Channel geladen werden.
Ich bin mir nicht 100%-ig sicher, ob ich dass so richtig mit den Parameter pabFileData gemacht habe.
Habe das Argument in dem CLF als uint8 Array Data Pointer deklariert.
Als Übergabeparameter habe ich diesem Argument ein Bytearray übergeben, welches ich vorher aus einem String umgewandelt habe. In diesem String lesen ich aus dem Pfad alle Daten ein.
Die CLN Konfiguration scheint mir nun grundsätzlich korrekt. Ob und wie die Funktion selber funktioniert entzieht sich total meiner Kenntnisse, da kann ich Dir nicht weiterhelfen. Du wirst hiermit wohl beim Support von Hilscher besser aufgehoben sein. Die können Dir sagen was für Daten in dem Bytearray drin sein müssen, allefalls andere Voraussetzungen die Du zuvor durch möglich andere Funktionsaufrufe bereitstellen musst, usw.
Ok.
Vielen Dank für die Hilfe. Dann werd ich mich jetzt wohl mal mit dem Support rumschlagen