Und wiedermal ein dll Problem



  • Hi, hab follgenden Code

    #include "K8055D.h"
    #include <iostream>
    using namespace std;
    
    int main()
    {
      int status;
      long int aData=-1;
    
      // 1. Open Card 0
      cout<<"\nOpening card 0...";
          status = OpenDevice(0);
      if(status <0)  // Check is OpenDevice was successful
      {
        cout<<"\nERROR! Unable to open card 0...EXITING.\n";
        return -1;   // Exit on failure
      }
    
      // 2. Clear Analog Channel 1
      cout<< "\n\nClearing Analog Channel 1...";
      ClearAnalogChannel(1);
    
      // 3. Read in value from Analog channel 1
      aData = ReadAnalogChannel(1);
      cout<<"\nValue read from Analog Channel 1 = "<<aData;
    
      // 4. Ask user to enter a value to send to Analog channel 1
      cout<<"\n\nEnter an integer (0-255) to be sent to Analog Channel 1 : ";
      cin >>aData;
    
      // 5. Send the user input value to Analog Channel 1
      cout<<"\nSending input value to Analog Channel 1.";
      OutputAnalogChannel(1,aData);
    
      // 6. Read in value from Analog channel 1
      aData = ReadAnalogChannel(1);
      cout<<"\nValue read from Analog Channel 1 = "<<aData;
    
      // 7. Close Device
      cout<<"\n\nClosing card 0...";
      CloseDevice();
    
      cout<< "Done.\n\nPress the Enter key to exit...";
      char ch;
      cin.get(ch);
      cin.get(ch);
    
    return 0;
    }
    

    Kompiliert einwandfrei, und sol wie ihr sihcerlich schoin festgestellt habt mit hilfe der K8055.h dann die dll ansprechen. Bekomme follgende Fehlermeldung

    inker-Vorgang läuft...
    example.obj : error LNK2001: Nichtaufgeloestes externes Symbol __imp__CloseDevice@0
    example.obj : error LNK2001: Nichtaufgeloestes externes Symbol __imp__OutputAnalogChannel@8
    example.obj : error LNK2001: Nichtaufgeloestes externes Symbol __imp__ReadAnalogChannel@4
    example.obj : error LNK2001: Nichtaufgeloestes externes Symbol __imp__ClearAnalogChannel@4
    example.obj : error LNK2001: Nichtaufgeloestes externes Symbol __imp__OpenDevice@4
    Debug/rapid.exe : fatal error LNK1120: 5 unaufgeloeste externe Verweise
    Fehler beim Ausführen von link.exe.
    

    hab schon probiert ob es daran liegt das ich im Source-Code bei OpenDevice kein

    k8055d obj
    obj.OpenDevice(CardAddress)
    

    einegfügt hab
    Hilft leider auch net.
    Wo ist den der Fehler? 😕
    mario



  • Man muss noch die DLL hinzulinken über ne Import Library. Hast du eine .lib Datei?



  • Nein das is ja die Kacke.
    Hba vom hersteller eh auch c plusplus foiles (Header, cpp usw) bekommen, aber unter dem ordner BCB und ich schätze mal das steht für Borland C++ Builder, und der vertägts sich net ganz mit dem microsoft visual c++ das ich verwenden muß.



  • Zur Not kannst du die Funktionszeiger ja über LoadLibrary und GetProcAddress holen. 🙄



  • kannste die dateien mal ins web laden? dann kann man sich mal anschauen was dabei ist 😉



  • jo sollt scho gehen, wenn mann das hier net kann muß ich dich aber bitten die a bissekr zu gedulden weil ich hab die zugänge zu der ftp unseres anbieters net da.



  • bei http://www.rapidshare.de/ kannst du schnell was uploaden 😉



  • Aja, da bin ich heut auf der suche nach hilfe eh schon druaf gestoßen 🙂
    hat er mal wieder nicht geschalten.

    Hier der Link

    [url]
    http://rapidshare.de/files/4075369/BCB.rar.html
    [/url]



  • Du hast Recht, die lib ist nicht für Visual C++ geeignet. Source der DLL ist auch nicht dabei. Sieht schlecht aus.

    Frag doch mal beim Hersteller nach wie die sich das vorgestellt haben, wie man die DLL mit Visual C++ benutzen soll.

    Aber sind ja nicht viele Funktionen, da kann man auch GetProcAddress benutzen.



  • Werd mal mit GetPro.. probieren., mal schauen ob ich das zusammen bring. Auf jedenfall mal Vielen Dank für die Unterstützung 👍

    cu mario



  • Wenn du das hinkriegst - sagst du dann, wie es geht? Ich hab das neulich mal versucht und bin kläglich daran gescheitert, einen Parameter zu übergeben. 😞



  • lol. gibt doch genügend beispiele im netz



  • Vielleicht hilft das. Habe ich aus einer Headerdatei für eine Dll.
    So ganz blicke ich zwar noch nicht durch, aber es funktioniert. 🤡

    HINSTANCE hDll;
    
    typedef	BYTE (CALLBACK* pDLLInit)  (BYTE); //Rückgabewert = BYTE und Parameter = BYTE
    FARPROC	lpfnInit;
    pDLLUsbInit  Init;
    
    int LoadMyDll()
    {
        hDll= LoadLibrary("myDll.dll");    
        if (hDll==NULL) 
        {
            MessageBox(NULL, "Dll could not be opened", "Error", MB_OK);
            return false;
        }
        lpfnInit = GetProcAddress(HMODULE(hDll), "Init");
        Init     = pDLLInit(lpfnInit);
        return true;
    }
    
    void UnloadMyDll()
    {
        FreeLibrary(hDll);
    }
    

    Der Aufruf im Programm würde dann so aussehen :

    LoadMyDll();  // Kann nun die Funktion Init() benutzen
    ....
    BYTE result, parameter;   // nur ein Beispiel
    result = Init(parameter);
    ....
    UnloadMyDll();
    


  • Hi Paul_C,

    hab den Code eingefügt bzw adapiert, jedoch beleibt es bei der selben "graußlichen" Fehlermedlung

    example.obj : error LNK2001: Nichtaufgeloestes externes Symbol __imp__CloseDevice@0
    

    Trotzdem mal vielen Dank für den Tipp bzw die Hilfe 👍

    mario



  • estartu_de schrieb:

    Wenn du das hinkriegst - sagst du dann, wie es geht? Ich hab das neulich mal versucht und bin kläglich daran gescheitert, einen Parameter zu übergeben. 😞

    Wenn ich ers hinbekomm, sag ich es dir slebstverständlich und schick dir den Code.

    mfg mario


Anmelden zum Antworten