2016-11-10 58 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不執行 - 因此提供錯誤代碼和操作系統版本。 – RbMm

+0

不確定,因爲你還沒有告訴我們什麼是不工作的,如果你收到任何錯誤信息等你說的是,它不能在另一臺計算機上工作..... – Sorceri

+0

如果你正在編譯VS 2015生成的標準命令行應用程序(使用默認設置),這在任何機器上都不會按預期工作。嚮導生成的代碼默認使用Unicode,即Windows上的UTF-16LE,但您的'printf'調用假定爲ANSI編碼。 – IInspectable

回答

0

選擇從項目設置適當的運行環境:

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

將決定如果依靠靜態項目鏈接到運行時或通過DLL的動態鏈接。如果您選擇動態鏈接到運行時,那麼這些DLL需要存在於正在運行的系統上。

選擇/ MT選項將靜態鏈接您的可執行文件,從而允許您在不安裝Visual C++可再發行的運行時組件的情況下在另一個系統上運行。如果您選擇/ MD選項,那麼您正在運行的系統將需要安裝它。安裝諸如最新的Visual C++ Redistributable 2015之類的可再發行組件。

Here是一個體面的詳細寫在這個。

UPDATE:

除了下面的評論與靜態VS動態鏈接...你可以設置你的目標平臺:

Configuration Properties -> General -> Platform Toolset 

我不知道還有什麼其他的計算機運行此但如果是XP,2015有Visual Studio 2015 - Windows XP(v140_xp)的選項。確保您的開發平臺覆蓋了您定位的平臺。

This文章針對這個答案主要是從.NET的角度來看,但信息同樣重要。

+0

感謝您的回覆。但我不知道是否有另一個關於這個事實的解決方案。 – Maestus

+0

雖然你所說的靜態鏈接和動態鏈接通常都是真實的,但它並不適用於這種特殊情況,因爲GetWindowsDirectory()和GetSystemDirectory()都是在kernel32.dll中實現的, Windows已經並不需要(並且不應該)與第三方應用程序一起分發。問題必須是別的。 –

+0

@Remy好點。我更新瞭解決平臺工具集的答案。 –