Klasse zur Verwendung einer dll
Verfasst: 25. August 2009 20:29
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
cpp
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
vor?
Danke im Voraus und Gruss
Lodo2609
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_Hcpp
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);
}
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)();Danke im Voraus und Gruss
Lodo2609