QLibrary seltsames Verhalten

Alles rund um die Programmierung mit Qt
Antworten
dazedly
Beiträge: 197
Registriert: 3. Oktober 2010 15:38
Kontaktdaten:

QLibrary seltsames Verhalten

Beitrag von dazedly » 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:

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)); 
Neuer Code:

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");

Unter Linux funktioniert mein Code.

EDIT:

this->ctLib ist ein QLibrary Pointer als Klassenmember

franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: QLibrary seltsames Verhalten

Beitrag von franzf » 18. Oktober 2012 13:40

Genaue Fehlermeldung, bitte. Hast du dir schon mit dem Debugger nen backtrace geben lassen?
Woher weißt du denn, dass es genau an der Stelle passiert?
Warum sind die CT_init-Parameter in der QLibrary-Version plötzlich unsigned int und nicht mehr unsigned char?

dazedly
Beiträge: 197
Registriert: 3. Oktober 2010 15:38
Kontaktdaten:

Re: QLibrary seltsames Verhalten

Beitrag von dazedly » 18. Oktober 2012 14:11

Ich weiß das, da ich das Ganze mit qDebug eingegrenzt habe. Das Problem besteht ist, dass QLibrary::isLoaded() nie true ist. Das mit den Unterschiedlichen Parametern ist schon geändert, aber nicht Teil des Problems. Der MSVC Debugger spuckt leider auch nichts brauchbares aus. Mein Problem ist jetzt eigentlich "nur", dass QLibrary die DLL nicht lädt.

franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: QLibrary seltsames Verhalten

Beitrag von franzf » 19. Oktober 2012 21:35

aber unter Windows stürzt es bei QLibrary::resolve("symbolname") mit access violation ab
Das Problem besteht ist, dass QLibrary::isLoaded() nie true ist
Bitte... es sollte klar sein, dass wenn die lib nicht geladen werden kann, irgend etwas böses passiert. Dass isLoaded() nie true wird hast du im ersten Post nicht erwähnt. DAS IST ABER WICHTIG! Durch die qDebug()-Zeile hab ich vielmehr angenommen dass gerade das Laden funktioniert hat!
Was gibt denn errorString() aus?

dazedly
Beiträge: 197
Registriert: 3. Oktober 2010 15:38
Kontaktdaten:

Re: QLibrary seltsames Verhalten

Beitrag von dazedly » 21. Oktober 2012 22:19

Mehr als Unknown Error bekomme ich nicht :(

Antworten