EXE ohne Redistributable Package laufen lassen
-
Hallo zusammen,
ich bräuchte bitte mal einen Tipp zu folgendem Problem:
Ich habe mit Visual Studio 2008 eine "Win32 Console Application" erstellt. (MFC auch angehakt).
Nun habe ich ein wenig C++ Code geschrieben und will das Projekt bzw. die *.exe auf einem Rechner laufen lassen, auf welchem KEIN Visual Studio installiert ist.
Dabei bekomme ich die Fehlermeldung:
The system cannot execute the specified programHabe herausgefunden, dass ich zur Lösung Microsoft Visual C++ 2008 Redistributable Package installieren muss.
Das ist jedoch in meinem Projekt nicht möglich. Daher die Frage: Was muss ich in den Projekteinstellungen(Compiler/Linker) ändern um das Projekt "nativ" kompilieren zu können?
D.h. ich möchte die *.exe ausführen können, OHNE dazu das Redistributable Package installieren zu müssen.Danke für Hilfe
-
Statisch linken: http://blog.kalmbach-software.de/de/2008/03/05/wie-man-statisch-gegen-die-c-runtime-crt-linkt/
-
Dieser Thread wurde von Moderator/in evilissimo aus dem Forum C++ in das Forum MFC (Visual C++) verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Hallo matze,
der Tipp war Gold wert. Vielen Dank!
Vielleicht kannst Du mir bei noch einer Einstellung helfen:
Manche Zeichen werden auf der Konsole falsch ausgegeben: ein ü ist eine hochgestellte 3 und ein Leerzeichen ist ein á.Was muss ich denn da noch umstellen?
Gruß
-
GaDgeT schrieb:
Manche Zeichen werden auf der Konsole falsch ausgegeben: ein ü ist eine hochgestellte 3 und ein Leerzeichen ist ein á.
Was muss ich denn da noch umstellen?
Ich gebe Strings in der Konsole immer mit meiner Funktion CommandLine_WriteConsole_translated() aus.
So werden die Sonderzeichen korrekt ausgegeben.void CommandLine_WriteConsole_translated( LPTSTR ptcsz_string ) { DWORD dw_dummy; uint32 ui32_idx; if ( ptcsz_string != NULL ) { ui32_idx = 0; do { switch ( ptcsz_string[ui32_idx] ) { case TEXT( 'ä' ): ptcsz_string[ui32_idx] = TEXT( '\204' ); break; case TEXT( 'ö' ): ptcsz_string[ui32_idx] = TEXT( '\224' ); break; case TEXT( 'ü' ): ptcsz_string[ui32_idx] = TEXT( '\201' ); break; case TEXT( 'ß' ): ptcsz_string[ui32_idx] = TEXT( '\341' ); break; case TEXT( 'Ä' ): ptcsz_string[ui32_idx] = TEXT( '\216' ); break; case TEXT( 'Ö' ): ptcsz_string[ui32_idx] = TEXT( '\231' ); break; case TEXT( 'Ü' ): ptcsz_string[ui32_idx] = TEXT( '\232' ); break; } ui32_idx++; } while ( ptcsz_string[ui32_idx] != TEXT( '\0' ) ); WriteConsole( h_console_stdout, ptcsz_string, _tcslen( ptcsz_string ), &dw_dummy, NULL ); } }
-
CharToOEM macht den Dienst für Dich wohl besser, denn es berücksichtigtalle Zeichen:
http://msdn.microsoft.com/en-us/library/ms647473(VS.85).aspx
-
CharToOem() gibts aber erst ab Windows XP
D.h. Windows 2000 Nutzer und früher gucken in die Röhre....,Aber ansonsten wäre CharToOem() die bessere Wahl, da alle Sonder-Zeichen berücksichtigt werden.
Martin
-
Mmacher schrieb:
D.h. Windows 2000 Nutzer und früher gucken in die Röhre....,
Alle 3?
-
Mmacher schrieb:
CharToOem() gibts aber erst ab Windows XP
D.h. Windows 2000 Nutzer und früher gucken in die Röhre....,Aber ansonsten wäre CharToOem() die bessere Wahl, da alle Sonder-Zeichen berücksichtigt werden.
Martin
Hääää? CharToOEM gibt es seit Windows 95 und NT 3.51!
-
Martin Richter schrieb:
Hääää? CharToOEM gibt es seit Windows 95 und NT 3.51!
Oha, hab Deinem Link gefolgt, dort steht "Minimum supported client: Windows XP" ... scheint fehlerhaft zu sein.
Im alten SDK von Visual Studio 6 steht dann sicher CharToOEM() drin, hab es nur nicht parat um mal eben nachsehen zu können.
Wenn das so stimmt, werde ich mal bei passender Gelegenheit ein Workaround auf CharToOEM() bzw. CharToOEMBuff() machen.
Danke für den Hinweis, Martin@_matze:
Es sind immer noch viele Systeme im Einsatz, die sogar mit Windows NT4 laufen.
Es sind aber keine klassischen User-PCs, wie die meisten Foren-Leser sie geläufig kennen, sondern in Maschinen oder Gebäude-Automation verbaute Industrie-PCs.
Und von den Stückzahlen her sind in unserem Umfeld sicher etliche Hunterte, wenn nicht gar einige Tausend...Und schau mal in den Kaufhäusern auf die Registrierkassen, einige haben heute noch das uralte Windows CE 3.0 im Einsatz....
Martin
-
Mmacher schrieb:
@_matze:
Es sind immer noch viele Systeme im Einsatz, die sogar mit Windows NT4 laufen.
Es sind aber keine klassischen User-PCs, wie die meisten Foren-Leser sie geläufig kennen, sondern in Maschinen oder Gebäude-Automation verbaute Industrie-PCs.
Und von den Stückzahlen her sind in unserem Umfeld sicher etliche Hunterte, wenn nicht gar einige Tausend...Und schau mal in den Kaufhäusern auf die Registrierkassen, einige haben heute noch das uralte Windows CE 3.0 im Einsatz....
Martin
Ja, ist mir klar. Auch User-PCs mit NT4 habe ich noch lange nach dem XP-Release in manchen Firmen gesehen, nach dem Motto "never change...". War trotzdem eine gute Vorlage.
-
Nur mal kurz zur Info:
Habe soeben (im Rahmen eines anderen Workarounds) eine Applikation auf CharToOem() umgestellt.
Wesentlich einfacher (etliche Quellcodezeilen weniger), und funktioniert prima.Nochmal Danke an Martin Richter für den Tipp!
Martin