statische verlinkung von mfc und externen klassen

darkarchon

Gesperrt
Hallo,

ich wüsste gerne wie man nicht nur die MFC eigenen Klassen, sondern auch die selbst geschriebenen Klassen STATISCH verlinken kann. Denn wenn ich die Programme auf anderen Rechnern ausführe, dann gehen diese natürlich nicht, weil die Dateien natürlich nicht alle da sind.

Wie kann ich also die selbstgeschriebenen und MFC Klassen und Methoden zusammen zu einer EXE bringen ?

Danke schonmal für die Antworten

Gruss

Dark Archon
 
hi,

ich weiss net ob ich dich richtig versteh.Du willst dass deine Klassen automatisch in der Entwicklungsumgebung von MFC dabei sind, ohne sie jedesmal explizit einbinden zu müssen?


Wenn du sie einfach nur zu einem Projekt hinzufügen willst:

project->einfügen->Dateien
und dann der ganze Schotter mit dem #include <>


col.blake
 
Zuletzt bearbeitet:
nein, ich will das die dateien hinterher in meiner exe komplett drin sind, weil ich so wie es jetzt ist das programm nur auf meinem eigenen rechner laufen lassen kann.

daher soll beim erstellen der exe ALLE dateien die ich zum ausführen später mal brauche eingebunden werden.

wie mache ich das ?


:confused: :confused: :confused:
 
Hi,
wenn du deine Klassen wie oben einbindest,vorausgesetzt sie liegen in Form von .cpp und .h Dateien vor, sind die Dateien und somit deine Klassen in deinem Programm (bzw exe-File).

Was bringt er denn fürne Fehlermeldung auf den anderen Rechnern?
 
er hat das problem das ich eine funktion aus einer klasse aufrufe, welche ich in die den include ordner kopiert hatte.

also folgendes, ich hatte vor ein bild in meinem programm anzeigen zu lassen, habe dazu die picture.h und die picture.cpp in den standard include ordner kopiert und dann in mein projekt eingebunden (und das include<picture.h> jeweils da wo ich die classen aufrufe, damit die bekannt sind)
das funktioniert auch wunderbar, nur wenn ich das projekt zu einer exe mache und auf einem anderen rechner ausführen will, sagt er bei dem bildladen einen fehler, den selben fehler den ich hatte als ich mal ein wenig mit dem picture rumgefrickelt hatte. also irgendwie bindet er die picture dateien nicht ordnetlich in das projekt ein.

und nun suche ich nach einem weg wie ich das sonst noch machen kann, ausser die dateien per #include "picture.h" usw einzubinden, da ich ja so quellcode zusätzlich verschicken müsste
 
habe eben gesehen das ich noch auf release stellen musste, aber viel hat das auchnicht gebracht, jetzt kommt folgende linker warnung:

Linking...
LINK : warning LNK4089: all references to "SHELL32.dll" discarded by /OPT:REF


und ich habe gerade mal mit Dependency walker nachgeschaut, welche dateien denn noch fehlen, es sind fast nur dll dateien, vom kernel bis zu winspool.drv

ich denke mal das das mit der warnung von oben zu tun hat, weiss aber nicht wie ich die wegbekomme.

hat da einer eine lösung ?

(ich kann ja nicht auf einem fremden rechner meine kerneldateien aufspielen, dann kann ich ja direkt neu installieren)
 
Die Warnung besagt nur, das die Shell32.dll bei dir nicht mehr benötigt wird, und deshalb alle Verweise darauf aus der .exe entfernt sind. Das ist völlig in Ordnung.

Die Verweise auf die anderen DLLs wie kernel32, user32, winspool sind auch völlig in Ordnung. Diese DLLs musst du auch nicht weitergeben. Die hat jeder.

Wichtig sind nur eventuelle Verweise auf MFC (sind ja durch statisches Linken weg) oder auf die VC Runtime (msvcrt...). Die DLLs müsste man ggf. mitliefern.

Und IMMER IMMER IMMER nur die Release weitergeben. Debug funktioniert nicht, weil die Debug-DLLs hat man nur mit Entwicklerumgebungen.
 
aber dadurch ist ja mein problem nicht gelößt !

das programm lässt sich ja trotz statischen linkens und release option nicht auf anderen rechnern starten, das ist nichtmal von meinem eigenen rechner möglich !

also das einzige was ich groß eingebracht habe, ist eine eigene header datei, und die hier im forum angebotenen picture.h /.cpp dateien, die man für bilder braucht !

habe die ins projekt eingebunden, und dann die exe erzeugt.

aber wenn ich nun das programm ausführen will, dann kommen error bezüglich des ladens des bildes (nur wirre zeichen, kein sinnvoller fehler)

und somit denke ich mal das es am verlinken liegt.

oder hat jemand eine andere idee ?

die picture dateien habe ich von hier ( http://www.tutorials.de/forum/showthread.php?t=169605 )
 
hm,

schick doch mal den Teil deines Quellcodes ,der das Bild laed und die picture.h+.cpp .
Und auch noch ein Bild der Fehlermeldung die auf anderen Rechnern kommt.

Dann könnten wir das mal ausprobieren.

mfg
Col.Blake
 
Code:
int currentfloor;
int width, height, picwidth, picheight;
CPicture m_Picture;
CDC *pDC;

CRect displaysize;
CWnd *curwnd = CWnd::GetActiveWindow();
curwnd->GetWindowRect(displaysize);	
pDC = new CClientDC( curwnd );

m_Picture.Load("..\\..\\Graphics\\test.jpg");
m_Picture.UpdateSizeOnDC(pDC);    picwidth = (int)m_Picture.m_Width;
picheight = (int)m_Picture.m_Height;


width = (int)displaysize.right;
height = (int)displaysize.bottom - 20; 

m_Picture.Show(pDC, CRect(0, 0-picheight/2, width, height));


das ist der code der dann ausgeführt werden soll

die picturedateien findest du HIER

http://www.tutorials.de/attachment.php?attachmentid=11049


achso, falls dort jetzt evtl ne variable oder sowas fehlt, dann mach sie einfach beim testen hin, bei mir ist das in verschiedenen klassen, daher kann es sein das ich jetzt eine vergessen habe raus zu kopieren ;)

danke schonmal für deine mühe !
 

Neue Beiträge

Zurück