?
Hi!
Die dll schimpft sich E816_DLL.dll und dient zur Steuerung eines Piezo-Stelltisches. Die Befehle, die ich brauche, sehen folgendermaßen aus:
int E816_ConnectRS232(const int nPortNr, const long BaudRate);
BOOL E816_MOV(int ID, const char* szAxes, double *pdValArray);
BOOL E816_SVO(int_id, const char* szAxes, BOOL *pbValArray);
Der erste Befehl ist klar, der zweite Bewegt den Tisch um pdValArray nach oben/unten, der dritte stellt die Steurung auf Closed Loop (ohne funzt das Verfahren nicht).
Bei keinem der Befehle produziert der Compiler eine Fehlermeldung, alle geben Rückgabewerte aus, die auch Sinn machen.
Als Windows Form programmiert:
Der erste geht immer, das Gerät verbindet auch (überprüfbar).
Der zweite gibt als Rückgabewert immer "false", der Tisch verfährt nicht
Der dritte geht manchmal erst bei zweiten oder dritten mal (wiederholt Button drücken, der den Befehl ausführt).
Als Konsolenanwendung programmiert:
Der erste geht immer, das Gerät verbindet auch (überprüfbar).
Der zweite geht auch immer, der Tisch verfährt, Rückgabewert "true"
Der dritte geht nicht, mit der Fehlermedung, das "bool_w64* nicht in BOOL*" konvertiert werden kann. Die Steuerung kann man aber auch manuell umstellen.
Also habe ich in der Bibliothek mindestens einen Befehl (der wichtigste ), der in der Konsolenanwendung funktioniert, in der Windows-Form aber nicht.
Eingebunden ist die dll in beiden Varianten gleich - also die .lib in die "Linker" eingetragen, die .h inkludiert, die .dll im entsprechenden Verzeichnis.