Probleme bein Einbinden einer DLL



  • hallo zusammen,

    wie der threadtitel schon verrät habe ich schwierigkeiten beim einbinden einer dll.

    kommen wir erstmal zu meinem vorhaben. ich möchte eine kleine exe compilieren welche eine kassenschublade über einen cashdrawerport(rj-11) öffnen soll. der hersteller hat hierzu einen c++ programmierschnipsel, eine.lib und eine .dll datei mitausgeliefert.

    ich arbeite zum ersten mal mit c++, dementsprechend gestaltet sich das ganze recht mühsam und langsam.

    in der hoffnung dass mir jemand einen tipp geben könnte, hänge ich hier den aktuellen stand des programms an.

    edit: quelltext war quatsch und stiftet nur verwirrung.
    

    ich bedanke mich bereits im voraus.

    gruß
    Jürgen



  • Die Fehlermeldung sagt ja eigentlich bereits alles.

    Was sollen die eckigen Klammern da?



  • die eckigen klammern habe ich übernommen weil es auf dieser seite als beispiel so angegeben war:
    http://msdn.microsoft.com/de-de/library/system.runtime.interopservices.dllimportattribute.setlasterror.aspx

    ich habe grade beim dll import runde klammern hingemacht -> fehlermeldung bleibt fast identisch außer dass ein anderes zeichen angegeben wird, irgendetwas fehlt da.
    wenn ichs ohne klammern probiere kommt das hier:

    C:\Users\Jura\Portwell4720.cpp:18: error: expected constructor, destructor, or type conversion before '(' token
    


  • Das ist .NET-Code, kein C++.



  • das ist jetzt eine überraschung... 😃

    ich bin die sache jetzt mal grundlegend neu angegangen.
    diese mitausgelieferte datei hat die endung Portwell4720.cpp -> berichtigt mich bitte wenn ich mich täusche, aber das wäre eine c++ datei oder?.

    einer readme welche ich im internet gefunden habe, konnte ich folgende information entnehmen:

    Portwell4720.cpp(\sample\4720)
    It is written by C language for our NOVA-4720 machine to link dynamically 
    with customer's program.
    

    Hier hingegen wird angegeben dass es sich um C handelt -> C jedoch hätte die Endung *.C oder?

    welchen compiler sollte ich verwenden?

    hier hänge ich mal den unveränderten, original code an:

    #include <windows.h>
    #define PORTWELL_4720_OPEN     10  // Control Code for opening cash drawer 1 of model number 4720 mainboard
    #define PORTWELL_4720_STATUS   11  // Control Code for getting status of cash drawer 1 of model number 4720 mainboard
    #define PORTWELL_4720_OPEN2	   24  // Control Code for opening cash drawer 2 of model number 4720 mainboard
    #define PORTWELL_4720_STATUS2  25  // Control Code for getting status of cash drawer 2 of model number 4720 mainboard
    #define CREATE_FILE_FAILED     -1
    #define DEVICE_CONTROL_FAILED  -2
    #define PORTWELL_4720_CASH_DRAWER_IS_OPEN   1
    #define PORTWELL_4720_CASH_DRAWER_IS_CLOSED 0
    
    // szDeviceName ->Device Driver Name
    // CTL_ID-> Control Code
    
    __declspec( dllimport ) DWORD WINAPI DeviceControl(LPSTR szDeviceName, DWORD CTL_ID);
    __declspec( dllimport ) DWORD WINAPI PortwellGetCashDrawerStatus(LPSTR szDeviceName,DWORD CTL_ID);
    
    void main()
    {
     DWORD ret;
    
     //ret=0  -> success
     //ret=-1 -> create file failed
     //ret=-2 -> device io control failed
     ret = DeviceControl("\\\\.\\FEC_cash", PORTWELL_4720_OPEN); //for cash drawer 1
    
     //ret=0  -> cash drawer is closed
     //ret=1  -> cash drawer is open
     //ret=-1 -> create file failed
     //ret=-2 -> device io control failed
     ret = PortwellGetCashDrawerStatus("\\\\.\\FEC_cash", PORTWELL_4720_STATUS); //for cash drawer 1
    
     //ret=0  -> success
     //ret=-1 -> create file failed
     //ret=-2 -> device io control failed	 
     ret = DeviceControl("\\\\.\\FEC_cash", PORTWELL_4720_OPEN2); //for cash drawer 2
    
     //ret=0  -> cash drawer is closed
     //ret=1  -> cash drawer is open
     //ret=-1 -> create file failed
     //ret=-2 -> device io control failed
     ret = PortwellGetCashDrawerStatus("\\\\.\\FEC_cash", PORTWELL_4720_STATUS2); //for cash drawer 2
    
    }
    


  • [DllImport("cashdll.dll")]
    

    und

    void int()
    

    hab ich nirgendwo in dem bsp. gefunden

    des weiteren heißt es NICHT void main() sondern

    int main()
    

    das hier:
    http://msdn.microsoft.com/de-de/library/system.runtime.interopservices.dllimportattribute.setlasterror.aspx
    ist .NET

    Hast du also ein Projekt mit .Net angelegt? Wenn nicht solltest du das vrmtl mal machen und wenn doch dann musste wohl warten bis dein Thread verschoben wurde oder direkt im .net-SubForum posten ^^

    bb



  • diese veränderungen sind 'auf meinem mist gewachsen'. hat jedoch nur für verwirrung gesorgt und ist absoluter nonsens...

    der quellcode, gekürzt auf das nötigste:

    #include <windows.h>
    
    #define PORTWELL_4720_OPEN     10  // Control Code for opening cash drawer 1 of model number 4720 mainboard
    
    // szDeviceName ->Device Driver Name
    // CTL_ID-> Control Code
    
    __declspec( dllimport ) DWORD WINAPI DeviceControl(LPSTR szDeviceName, DWORD CTL_ID);
    //__declspec( dllimport ) DWORD WINAPI PortwellGetCashDrawerStatus(LPSTR szDeviceName,DWORD CTL_ID);
    
    int main()
    {
     DWORD ret;
     //ret=0  -> success
     //ret=-1 -> create file failed
     //ret=-2 -> device io control failed
     ret = DeviceControl("\\\\.\\FEC_cash", PORTWELL_4720_OPEN); //for cash drawer 1
    }
    

    ich habe es jetzt mit deinem vorgeschlagenen 'int main()'; versucht und nun lautet die fehlermeldung einen schritt definierter:

    C:\Users\Jura\AppData\Local\Temp/cc0gcaaa.o(.text+0x3a):Portwell4720.cpp: [Linker Error]undefined reference to `_imp___Z13DeviceControlPcm@8'
    collect2: ld returned 1 exit status
    

    die problematik ist einleuchtend. er kann mit devicecontrol absolut nichts anfangen weil diese spezifische bilbiothek (cashdll.dll und cashdll.lib) nicht eingebunden wurde. und hier ist der punkt ab dem ich nicht mehr weiter komme, da ich keinerlei kenntnisse in c++ habe. stundenlanges suchen im internet konnte mir auch nicht begreiflich machen wie ich diese dll in der vorliegenden konstellation einbinden könnte.
    vllt. erbarmt sich mir jemand und hilft 🙂

    gruß
    Jürgen


Anmelden zum Antworten