Klasse zur Verwendung einer dll

Du bist neu in der Welt von C++? Dann schau hier herein!
Antworten
lodo2609
Beiträge: 13
Registriert: 19. Juli 2009 11:04

Klasse zur Verwendung einer dll

Beitrag von lodo2609 »

Hallo zusammen,

ich versuche in Anlehnung an den Thread

http://www.qt-forum.de/forum/viewtopic. ... 9fcc67db59

eine Klasse zur Nutzung einer dll zu schreiben.

Bisher sieht sie so aus:
Header

Code: Alles auswählen

#ifndef QMPUSBAPI_H
#define QMPUSBAPI_H
#include <QLibrary>
#include "windows.h"

class QMPUSBAPI:public QLibrary
{
protected:

    bool (* MPUSBGetDLLVersion)(void);
    bool (* MPUSBGetDeviceCount)(char* pVID_PID);
    bool (*MPUSBOpen)(DWORD instance,         // Input
                 char* pVID_PID,            // Input
                 char* pEP,                 // Input
                 DWORD dwDir,               // Input
                 DWORD dwReserved);
public:
    QMPUSBAPI();
    DWORD PICGetDLLVersion(void);
    DWORD PICGetDeviceCount(char* pVID_PID);
    HANDLE PICOpen(DWORD instance,         // Input
                 char* pVID_PID,            // Input
                 char* pEP,                 // Input
                 DWORD dwDir,               // Input
                 DWORD dwReserved);
};

#endif // QMPUSBAPI_H

cpp

Code: Alles auswählen

#include "qmpusbapi.h"

QMPUSBAPI::QMPUSBAPI()
{
    MPUSBGetDLLVersion = NULL;
    MPUSBGetDeviceCount = NULL;
    MPUSBOpen = NULL;
}


DWORD QMPUSBAPI::PICGetDLLVersion(void)
{
    bool tets = isLoaded();
    if ( !MPUSBGetDLLVersion )
        ( DWORD& ) MPUSBGetDLLVersion = ( DWORD ) resolve( "mpusbapi.dll", "_MPUSBGetDLLVersion" );
    tets = isLoaded();
    return  (DWORD)(*MPUSBGetDLLVersion)();
}

DWORD QMPUSBAPI::PICGetDeviceCount(char* pVID_PID)
{
    bool tets = isLoaded();
    if ( !MPUSBGetDeviceCount )
        ( DWORD& ) MPUSBGetDeviceCount = ( DWORD ) resolve( "mpusbapi.dll", "_MPUSBGetDeviceCount" );
    tets = isLoaded();
    return  (DWORD)(*MPUSBGetDeviceCount)(pVID_PID);
}

HANDLE QMPUSBAPI::PICOpen(DWORD instance,         // Input
                 char* pVID_PID,            // Input
                 char* pEP,                 // Input
                 DWORD dwDir,               // Input
                 DWORD dwReserved)
{
    if ( !MPUSBOpen )
        ( HANDLE& ) MPUSBOpen = ( HANDLE ) resolve( "mpusbapi.dll", "_MPUSBOpen" );

    return  (HANDLE)(*MPUSBOpen)(instance, pVID_PID,pEP, dwDir, dwReserved);
}
Wenn ich nun die PICGetDLLVersion() Funktion aufrufe, so erhalte ich nicht den erwarteten Wert 0x10100000 sondern einen willkürlichen Wert. Ich habe mir daraufhin im Debugger die Variablen angeschaut und folgende "Verschiebung" festgestellt:
MPUSBGetDLLVersion = 0x8d012d0 <mpusbapi!_MPUSBClose>
MPUSBGetDeviceCount = 0x8d015cc <mpusbapi!_MPUSBGetConfigurationDescriptor>
MPUSBOpen = 0x8d01608 <mpusbapi!_MPUSBGetDLLVersion>

Woran kann dies liegen und kann das die Ursache der unerwarteten Rückgabewerte sein? Oder liegt eventuell ein Syntaxfehler bei

Code: Alles auswählen

return  (DWORD)(*MPUSBGetDLLVersion)();
vor?

Danke im Voraus und Gruss
Lodo2609
nuke160
Beiträge: 22
Registriert: 3. August 2009 11:24

Beitrag von nuke160 »

Das ist deine Funktion:

Code: Alles auswählen

bool (* MPUSBGetDLLVersion)(void); 
Hier ist der Aufruf dieser Funktion:

Code: Alles auswählen

return  (DWORD)(*MPUSBGetDLLVersion)(); 
So wie ich das verstehe, versuchst du ein boolschen Wert in DWORD zu konvertieren? Ich schätze das ist der Fehler, so auf die Schnelle.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Ich habe immer noch nicht kapiert wo hier Qt im Spiel sein sollte... für mich sieht es so aus als fehlen hier elementare C (mit C++ hat das nicht viel ausser das class dort steht) - Grundlagen.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Antworten