Probleme mit QPluginloader unload unter Win7 + QtNetwork

Alles rund um die Programmierung mit Qt
Antworten
Baz
Beiträge: 67
Registriert: 22. August 2007 14:21

Probleme mit QPluginloader unload unter Win7 + QtNetwork

Beitrag von Baz »

Hallo,

ich habe mir einen Updatemanager geschrieben, der als Plugin geladen wird und Dateien mittels QNetworkAccessManager in ein temporäres Verzeichnis herunterlädt. Dann wird das Plugin entladen und die Dateien verschoben. Da das Plugin entladen ist, könnte es sich also auch selbst updaten - soweit die Theorie. Unter Windows Xp funktioniert das auch ohne Probleme, Windows 7 macht aber Probleme. Der unload-Aufruf blockiert das ganze Programm und kehrt auch nicht mehr zurück. So ein Verhalten ist mir vom QPluginLoader bisher völlig unbekannt.
Ich weiß nicht, ob es mit der Networkbibliothek unter Windows 7 irgendwie Probleme gibt. Ich hatte ursprünglich den Download über QFtp laufen. Unter Windows 7 gab es dann das Problem, dass QFtp hin und wieder nicht mitbekommen hat, dass der Download eigentlich abgeschlossen ist - und das Programm damit dann auch nicht weiterlief.

Ich habe mal ein kleines Beispiel zusammengebastelt und angehängt, hier die zwei wichtigsten Codestücke:

Die Klasse, die das Plugin lädt:

Code: Alles auswählen

void Loader::load()
{
	loader.setFileName(qApp->applicationDirPath() + "/plugin.dll");
	QObject* obj = loader.instance();

	QThread* thr = qobject_cast<QThread*>(obj);
	connect(thr, SIGNAL(finished()), this, SLOT(finished()));
	thr->start();
}

void Loader::finished()
{
	loader.unload();
}
und das Plugin selbst:

Code: Alles auswählen

void Plugin::run()
{
	QNetworkAccessManager manager;
	QNetworkRequest request;
	request.setUrl(QUrl("http://qt.nokia.com"));
	request.setRawHeader("User-Agent", "MyOwnBrowser 1.0");

	QNetworkReply* reply = manager.get(request);
	connect(reply, SIGNAL(finished()), this, SLOT(finished()));
	exec();
	delete reply;
}

void Plugin::finished()
{
	quit();
}
jeweils auf das Wesentliche reduziert.

Ich hoffe, jemand hat eine Idee :)

Gruß Michael

[edit]
- Ah, fast vergessen: Unter Windows 7 MIT Entwicklungsumgebung (VS 2008), läuft das ohne Probleme. Auf einem Rechner ohne nicht...
- Das Programm ist unter WinXp/Win7 32bit mit VS 2008 kompiliert.
[/edit]
Dateianhänge
plugin-network.zip
(2.63 KiB) 258-mal heruntergeladen
Antworten