2013-06-06 41 views
0

如何使用C#預處理程序目錄找到在64BitOperatingSystem上運行的32BitProcess。C#預處理程序32BitProcess在64BitOperatingSystem上運行

欲瞭解更多信息,我需要聲明dll名稱(基於位)訪問extern函數。我需要使用預處理器方式的以下代碼。

public String WABDll; 
if (64Bit) 
{ 
    WABDll = "Win-64.dll"; 
} 
else if(32Bit Process on 64BitOS) 
{ 
    WABDll = "Win-32on64.dll"; 
} 
else if(32Bit) 
{ 
    WABDll = "Win-32.dll"; 
} 

我嘗試以下方法

#if _64BIT 
    public const String WABDll = "Win-64.dll"; 
#elif _32BIT 
    public const String WABDll = "Win-32on64.dll"; 
#else 
    public const String WABDll = "Win-32.dll"; 
#endif 

任何建議。

回答

1

你解決不了這個:

else if(32Bit Process on 64BitOS) 
{ 
    WABDll = "Win-32on64.dll"; 
} 

編譯時間,因爲編譯器不事先知道該程序將運行。 我可以建議你創建更多的解決方案「paltform」,聲明一些自定義的編譯器標誌並相應地使用它們。當然,您需要知道部署時間,哪個可執行文件必須在哪個平臺上運行。

+0

我舉個例子。 –

+0

這並不改變你不知道在編譯時 –

2

不要使用預處理器指令來做到這一點;在運行時使用the Environment class確定環境。 Is64BitOperatingSystemIs64BitProcess屬性應該爲您提供所需的信息。

+0

if(System.Environment.Is64BitOperatingSystem){if(System.Environment.Is64BitProcess){} else {}} else {}我以這種方式嘗試過的事實。但我需要它加載DLLImport時的預處理器。 –

+1

@BrittoRaj - 但在*編譯*時,你不知道*你的代碼將運行在哪個機器上。編寫兩個單獨的DLLImport並根據此答案決定在運行時調用哪一個。 –