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

Alles rund um die Programmierung mit Qt
Antworten
cyberduck
Beiträge: 16
Registriert: 14. Juli 2010 12:07

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

Beitrag 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?
Zuletzt geändert von cyberduck am 4. Februar 2011 10:39, insgesamt 1-mal geändert.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Die DLL mit einem 64Bit-Compilier kompilieren würde wohl helfen.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
cyberduck
Beiträge: 16
Registriert: 14. Juli 2010 12:07

Beitrag 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?!
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag 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.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
cyberduck
Beiträge: 16
Registriert: 14. Juli 2010 12:07

Beitrag 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!
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Beitrag 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 ....
Antworten