Hallo LabVIEW-Forum
,
ich habe diese Frage bereits im NI-Forum gestellt:
Beitrag im NI-Forum jedoch bisher keine Antwort erhalten.
Daher hoffe ich, dass mir vielleicht hier jemand weiterhelfen kann.
Beim Aufruf einer C++ DLL zur Kommunikation mit einem Controller eines Profilprojektors erhalte ich den Fehler 1097, da die übergebenen Parameter wahrscheinlich nicht korrekt sind.
VI
; .DLL; Header-Datei; Beschreibung der Funktion und Parameter sowie Screenshots sind in einer .zip-Datei beigefügt.
Die Rückgabewerte von Funktionen, die mit dem Controller kommunizieren, sind immer vom Typ ReturnCode (die enum Definition des Fehlercodes).
In der Header-Datei ist ReturnCode definiert als:
enum class ReturnCode
{
RC_ERR_NONE = 0x0000,
RC_ERR_COMMUNICATION_NONE = 0x1000,
RC_ERR_CHECKSUM = 0x1001,
RC_ERR_LENGTH = 0x1002,
RC_ERR_VERSION = 0x1003,
RC_ERR_COMMAND = 0x1004,
RC_ERR_TIMEOUT = 0x1005,
RC_ERR_UNABLE_TO_EXECUTE = 0x2001,
RC_ERR_PART_FAILURE = 0x2002,
RC_ERR_OUT_OF_BOUND = 0x2003,
RC_ERR_INVALID_PARAM = 0x3001,
RC_ERR_INVALID_OPERATION = 0x3002,
RC_ERR_NOT_FOUND = 0x3003,
RC_ERR_INVALID_TARGET = 0x3004,
RC_ERR_ALREADY_EXISTS = 0x3005,
RC_ERR_MEMORY_ALLOCATION_ERROR = 0x3006,
RC_ERR_NO_SPACE = 0x3007,
RC_ERR_SDCARD_NOT_FOUND = 0x3008,
RC_ERR_WRITE_PROTECTED = 0x3009,
RC_ERR_READ_ONLY = 0x3010,
RC_ERR_HEAD_NOT_FOUND = 0x3011,
RC_ERR_FAIL = 0x3012,
RC_ERR_OUTPUT_ERROR = 0x3013,
RC_ERR_OVERFLOW_IMAGE_MEMORY = 0x3014,
RC_ERR_NO_USB_HDD = 0x3015,
RC_ERR_USB_WRITE_PROTECTED = 0x3016,
RC_ERR_BUFFER_SIZE = 0x5000,
RC_ERR_UNKNOWN = 0xF000,
};
Der Import der DLL-Funktionen mit dem Import Shared Library Wizard ist nicht möglich, da die folgenden Symbole nicht definiert sind: ReturnCode.
Also habe ich versucht, eine einfache Funktion (USB-Verbindung mit Controller herstellen) nur mit Returncode und ohne Parameterübergabe aufzurufen.
Das Format der Funktion zum Verbinden der USB-Kommunikation ist:
ReturnCode TMXIF_OpenUsbCommunication();
Mein Funktionsaufruf über Call Library Function:
int32_t TMXIF_OpenUsbCommunication (void);
Ich habe auch verschiedene Rückgabetypen ausprobiert oder Calling convention stdcall, erhalte aber immer den Fehler 1097.
Ich gehe davon aus, dass ich die Funktionen der DLL nicht aufrufen kann, da der Rückgabewert als "ReturnCode" definiert ist und deshalb der Funktionsaufruf nicht ohne weiteres in LabVIEW möglich ist.
Ich habe diesen Beitrag gefunden, in dem beschrieben wird, dass in diesem Fall zum korrekten Aufrufen der DLL eine Wrapper DLL geschrieben werden muss:
What is a Wrapper DLL and When Do I Need One?
Ich habe leider absolut keine Ahnung von C++ und konnte keine Beispiele finden, wie man eine Wrapper-DLL schreibt.
Mir ist bewusst, dass die Erstellung einer Wrapper-DLL keine einfache Sache ist (vorallem für jemanden ohne Vorkenntnisse), aber irgendwo muss ich anfangen um weiterzukommen.
Außerdem wäre es gut zu wissen, ob die Ursache für den Fehler 1097 tatsächlich der ReturnCode ist oder ob ich einen anderen Fehler mache.
Ich wäre sehr dankbar für jede Hilfe oder Erklärung, die mich bei dem Problem weiterbringt.