QLibrary seltsames Verhalten
Verfasst: 16. Oktober 2012 15:21
Unter Windows habe ich die ganze Zeit mit LoadLibrary eine DLL zur Laufzeit geladen. Die hat auch richtig funktioniert. Jetzt wollte ich QLibrary benutzen, was auch unter Linux richtig funktioniert, aber unter Windows stürzt es bei QLibrary::resolve("symbolname") mit access violation ab. Eigentlich sollte mir diese Funktion doch einen Nullpointer zurück liefern, wenn es eben nicht geladen werden konnte.
Alter funktionierender Code:
Neuer Code:
Unter Linux funktioniert mein Code.
EDIT:
this->ctLib ist ein QLibrary Pointer als Klassenmember
Alter funktionierender Code:
Code: Alles auswählen
typedef CHAR (__stdcall *CTINIT)(USHORT,USHORT);
LPCSTR szCT_init = "CT_init";
HMODULE hCtapiLib = 0x0;
CTINIT CT_init = NULL;
hCtapiLib = LoadLibrary("ctcym.dll");
if(hCtapiLib == NULL)
{
cout << "Couldn't load ctcym.dll!!!" << endl;
}
else
{
cout << "SUCCESS: ctcym.dll loaded!!!"<<endl;
}
cout << "test1" << endl;
CT_init = (CTINIT)(GetProcAddress(hCtapiLib,szCT_init));
Code: Alles auswählen
this->ctLib = new QLibrary("C:/Windows/system32/ctcym.dll");
qDebug() << this->ctLib->fileName() << this->ctLib->load() << this->ctLib->isLoaded()<< this->ctLib->errorString();
if(!this->ctLib->resolve("CT_init")) // hier stürzt er schon ab!
{
qDebug() << "cant resolve symbol!!";
}
typedef char (*CTINIT)(unsigned int,unsigned int);
CTINIT CT_init = (CTINIT) this->ctLib->resolve("CT_init");
EDIT:
this->ctLib ist ein QLibrary Pointer als Klassenmember