Bibliothek "richtig" einbinden und API-konform aufrufen?



  • Hi!

    Ich bin gerade dabei, mit MSVC 2005 eine Windows-Forms Anwendung zu programmieren.
    Das ganze spricht ein Gerät über den Seriellport an, die entsprechende .dll, .lib und .h dafür ist vorhanden und eingebunden.

    Das Problem: Einige Befehle funktionieren, andere werden ausgeführt, bewirken aber nichts. Wenn ich zum Gegentest eine Konsolenanwendung mit den gleichen Befehlen programmieren, funktioniert alles wunderbar.

    Jetzt habe ich in der Anleitung zu dem Gerät gelesen, die beigelegte dll sei für win-API gedacht und muss entsprechend konform aufgerufen werden.

    Gibt es eine spezielle Syntax, mit der ich Befehle dieser dll aufrufen kann, als sei sie in eine Konsolenanwendung eingebunden?

    Danke vorweg!
    Gruß, Burnout



  • Werd mal konkret. Welche DLL? Und welche Funktion wird in deiner Konsolenanwendung korrekt ausgeführt, sonst aber nicht? Und da kommt wirklich keine Fehlermeldung, Assertion, sonstwas?



  • 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.


Anmelden zum Antworten