2016-11-10 9 views
-6

最近、私はWindowsプログラミングを担当しています。次のコードは別のWindowsコンピュータでは実行されませんが、なぜですか?C++プログラムの互換性exe

#include <stdio.h> 
#include <Windows.h> 

int main() { 
    TCHAR tcWindowsPath[MAX_PATH]; 
    TCHAR tcCurrentPath[MAX_PATH]; 

    GetWindowsDirectory(tcWindowsPath, MAX_PATH); 
    GetSystemDirectory(tcCurrentPath, MAX_PATH); 

    printf("%s \n", tcWindowsPath); 
    printf("%s \n", tcCurrentPath); 
    //////////////////////////////////////// 
} 
+0

「作業していない」とはどういう意味ですか? exeはexecではありません - エラーコードとバージョンを提供してください。 – RbMm

+0

あなたが私たちに何かエラーメッセージが表示された場合は、別のコンピュータでは動作しないと言われていましたか? – Sorceri

+0

VS 2015生成標準をコンパイルしている場合コマンドラインアプリケーション(デフォルト設定)では、どのマシンでも期待通りに動作しません。ウィザードで生成されたコードは、デフォルトでUnicodeを使用しています。これはWindowsではUTF-16LEですが、 'printf'呼び出しはANSIエンコーディングを想定しています。 – IInspectable

答えて

0

プロジェクト設定から適切なランタイム環境を選択する:あなたは、静的実行時にプロジェクトをリンクするか、動的にDLLを介して、リンクに依存している場合

Configuration Propertes -> C/C++ -> Code Generation -> Runtime Library 

が決定されます。ランタイムに動的にリンクすることを選択した場合、それらのDLLは実行しているシステムに存在する必要があります。

/MTオプションを選択すると、実行可能ファイルが静的にリンクされ、Visual C++再配布可能ランタイムコンポーネントをインストールせずに別のシステムで実行できます。/MDオプションを選択すると、実行しているシステムにこれがインストールされている必要があります。直近のVisual C++ Redistributable 2015などの再配布可能ファイルをインストールする。

Here詳細はまあまあです。

UPDATE:私はあなたがこれを実行している他のどのようなコンピュータを確認していない

Configuration Properties -> General -> Platform Toolset 

動的リンク対静的で以下のコメントに加えて...あなたはとあなたのターゲットプラットフォームを設定することができますXPであれば、2015にはVisual Studio 2015 - Windows XP(v140_xp)のオプションがあります。ターゲットとするプラットフォームが開発プラットフォームの対象であることを確認してください。

This記事は主に.NETの観点からこの回答をターゲットにしていますが、情報はまさに関連性があります。

+0

しかし、私はこの事実についてもう一つの解決策があるのだろうか。 – Maestus

+0

静的対動的リンクについては、一般的にはtrueですが、 'GetWindowsDirectory()'と 'GetSystemDirectory()'は両方とも 'kernel32.dll'に実装されているので、この特定の状況には当てはまりません。 Windowsは、サードパーティ製のアプリケーションと一緒に配布する必要はありませんし、配布する必要もありません。問題は何か他のものでなければならない。 –

+0

@レミー良い点。答えを更新して、Platform Toolsetsにも対処しました。 –