Jag har gjort ett MFC-program med App-wizard i VC++. Det funkar bra att köra på min dator.
Men om jag skickar det till någon annan som inte har VC++ så fattas det en massa MFC*.DLLer. Någon som vet hur man blir av med detta problem?
MFC kompilering
7 svar · 506 visningar · startad av stenmark
När du skapar ett MFC projekt kan du välja mellan statisk och dynamisk bindning med MFC, välj statisk där så behöver du inte mfc*.dll. Du kan även ändra denna inställning från någon Option meny men jag kommer tyvärr inte ihåg vilken, men leta lite så hittar du den nog :)
/Viktor
Nej, jag håller inte med Viktor.
Du kan gott ha dynamisk bindning. Är sällan problem med dll-erna eftersom de används av så många program. Men se upp så att du inte skickar programmet med debug-kompilering för DÅ har de inte dll-erna. Dessa FÅR du heller inte distribuera så om du har statisk bindning och debug kanske MS kommer och knackar på din dörr.
Vilken version av Visual Studio/C++ har du? Är det 6.0 kan du gott räkna med att alla har de dller som MFC vill ha.
Vilka *.dll:er är det den saknar ?
leifen skrev:
Nej, jag håller inte med Viktor.
Du kan gott ha dynamisk bindning. Är sällan problem med dll-erna eftersom de används av så många program. Men se upp så att du inte skickar programmet med debug-kompilering för DÅ har de inte dll-erna. Dessa FÅR du heller inte distribuera så om du har statisk bindning och debug kanske MS kommer och knackar på din dörr.
Vilken version av Visual Studio/C++ har du? Är det 6.0 kan du gott räkna med att alla har de dller som MFC vill ha.
Uppenbarligen så är det problem nu eftersom han skriver det :)
Windows XP och 2000 levereras med mfc42.dll men 98'an gör det inte och då finns det många som inte har den och eftersom statisk bindning inte gör programmet så mycket större så tycker jag att det är betydligt bättre och man slipper en massa frågor om varför det inte fungerar.
Jag sitter vid en dator som har VC++ 6.0 installerat nu och alternativet heter "How would you like to use the MFC library?"
där kan man välja "As a shared DLL" (kräver att MFC42.dll finns på datorn som kör programmet) eller "As a statically linked library", då behövs ingen mfc42.dll på datorn. Prorammet blir ca 200-300kb större om du väljer att länka den statiskt.
För att ändra i ett existerande projekt väljer du "Project"->"Settings" och där ser du direkt en dorpdown meny där du kan välja hur du vill ha det.
/Viktor
Ja, men själva vitsen med DLLer är ju att de ska vara dynamiska. Om alla skulle länka alla dll-er statiskt skulle det öka med ganska många megabytes. Dessutom så uppdaterar ju MS ofta filer med säkerhetsfixar, men det tar ju inte på statiskt länkade dll-er.
OK, jag känner till begreppet "DLL-hell", fast detta gäller normalt inte MFC42.dll.
Sedan kan det ju bli så att man skickar debuglänkad kod, och som jag tidigare påpekade så får man ju inte det.
Nu är det ju ingen stor fråga så om man länkar statiskt så låt gå då, jag ville bara tjata lite :h
Det är otroligt dummt att länka statiskt till en DLL. Om MS buggrättar t ex mfc42.dll och levererar med denna i en servicepack så sitter man där med sin statiskt länkade DLL med buggar i.
Sen är det så att debug/release MFC-projekt länkar till olika MFC-dll:er. Ett MFC-debug projekt länkar mog mfc42D.dll. Om man har debug och bygger för unicode så länkar den mot mfc42ud.dll. Ett rent releasebygge utan unicode ska länka mot mfc42.dll
Får tacka för alla svaren. Visste inte att man kunde ställa om till release kompilering. Så nu fixade det sig.