Seite 1 von 1

DLL für 32 und 64 Bit [gelöst]

Verfasst: 3. Februar 2011 15:52
von cyberduck
Hallo zusammen,

wie ist es möglich, dass meine DLL unter 32 und 64 Bit funktioniert?

Meine Projekt-Datei sieht in etwa so aus:

Code: Alles auswählen

HEADERS =  ./Source/MyDLL.h

SOURCES =  ./Source/MyDLL.cpp

sources.files = $$SOURCES $$HEADERS *.pro
INCLUDEPATH = ./Source
OBJECTS_DIR = release
MOC_DIR = ./Moc

TARGET = MyDll
DESTDIR = Release
TEMPLATE = lib
CONFIG += release warn_off dll

win32{
	DEF_FILE = MyDLL.def
	RC_FILE = MyDLL.rc
}
Die Header-Datei der DLL etwa so:

Code: Alles auswählen

#ifndef MYDLL_H
#define MYDLL_H

class MyDLL;

#ifdef __cplusplus
extern "C" {
#endif

	__declspec( dllexport ) int _stdcall calculate(int age);

#ifdef  __cplusplus
}
#endif

#endif
und die Code-Datei so:

Code: Alles auswählen

#include "MyDLL.h"
#define   STRICT

#pragma comment(linker, "/DEF:MyDLL.def")

int calculate(int age)
{
	return age*365;
}
Das win32 in der Projekt-Datei hatte ich schon ohne Erfolg entfernt. Meine Anwendung wird mit TEMPLATE = app erstellt und läuft problemlos auf einem 64-Bit System, was muss ich in der DLL ändern?

Verfasst: 3. Februar 2011 17:44
von Christian81
Die DLL mit einem 64Bit-Compilier kompilieren würde wohl helfen.

Verfasst: 3. Februar 2011 21:59
von cyberduck
Die DLL mit einem 64Bit-Compilier kompilieren würde wohl helfen.
Ja, würde sicher helfen. Was ist aber an einer bzw. der Qt-Anwendung anders, damit diese auf einem 64Bit-System läuft, obwohl diese auch mit einem 32Bit-Compiler erstellt wurde? Genauer gesagt unter Windows 7 32Bit und dem mingw32.

Also müsste ich doch nicht für die DLL einen extra Compiler nutzen, zumal in der DLL nichts besonderes vorhanden ist?!

Verfasst: 4. Februar 2011 06:30
von Christian81
Ich verstehe nicht so richtig was Du willst...
Eine 32Bit-Anwendung kann auch unter 64Bit laufen wenn das Betriebssystem es utnerstützt was bei Windows (und Linux) von Haus aus der Fall ist.

Verfasst: 4. Februar 2011 10:38
von cyberduck
Ich verstehe nicht so richtig was Du willst...
Eine 32Bit-Anwendung kann auch unter 64Bit laufen wenn das Betriebssystem es utnerstützt was bei Windows (und Linux) von Haus aus der Fall ist.
Ja, die Vermutung hatte ich auch, war mir aber nicht sicher. Tatsächlich funktioniert die DLL, das Problem entsandt durch eine Anwendung, die die DLL genutzt hatte. Diese Anwendung wurde in C# geschrieben und mit der Konfiguration AnyCPU erstellt. In diesem Fall kann keine 32-Bit native DLL verwendet werden, die nicht unter .Net erstellt wurde. Wenn diese C# Anwendung als x86 erstellt wird, kann auch die 32Bit DLL genutzt werden.

Vielen Dank für die Hilfe!

Verfasst: 4. Februar 2011 10:46
von RHBaum
wie ist es möglich, dass meine DLL unter 32 und 64 Bit funktioniert?
Das eine (ein und dieselbe) DLL von 32 und 64 bit Applikationen genutzt wird, wird nicht funktionieren.
Du brauchst also immer eine 32 bit und eine 64 bit Variante.

Also 32bit Apps laufen nur mit 32 bit dlls, und 64 bit Apps nur mit 64er Dlls.
Das sollte dir klar sein ....

32 bit Apps koennen auch unter einem 64bit system laufen, dafuer stellt das BS 32bit runtimes zur verfügung. Es bleiben aber 32 bit Apps, mit eben deren einschraenkungen ....

Keine Ahnung ob man auf nem 32bit windows, mit nem 32 bit gcc, 64er Apps und dlls erzeugen kann. Denk mal das mit dem eher crosscompilieren kannst. (nur wird der gcc mit "__declspec( dllexport )" sicher ned weit kommen oder).

Der VS Compiler hingegen zickt aber irgendwie rum. auf nem 32bit system bietet er die toolkette zum erstellen von 64 bit anwednungen bei der Installation gar ned an :-) Kann aber sein das es dafuer auch tricks gibt. Nur mit debuggen wird dann halt doof :-)

Welches VS benutzt du ? Normal musst du halt deine Plattform auf 64 bit umstellen ....

Ich verwalte meine Projecte immer so, das die compilate(exe,dll,libs) nach /bin /bindebug .. usw abgelegt werden.
fuer 64 koenntest du dann nach /bin64 /bindebug64 compilieren.
Du brauchst dann aber auch 2 versionen der QT, ne 32er und ne 64er, sollt dir auch klar sein. glaub musst aber das QT plugin bissi austricksen, weil das laesst Dir pro Projectmappe nur eine QT version zu, egal welche plattform.
Besser da auf nen externes buildtool umsteigen (qmake / cmake).
Aber wenn Selber mit Variablen / Makros in VS umgehen kannst, zum compiler und linker configurieren, dann gehts auch mit VS selber ganz gut.

Hier auf arbeit kann ich grad ned schauen wie es geht (dank XP 32), aber zu hause fuer ein kleineres Project hab ichs schon mal gemacht ... Windows7-64 und VS2010

Ciao ....