2009-11-23 119 views
1

我知道我無法使用默認的「Platform Target:Any CPU」編譯設置來編譯我的C#代碼,並調用一個32位的C DLL。但是,如果我將此設置更改爲「Platform Target:x86」,那麼C#代碼應該在32位環境下運行,並在該32位環境下調用C DLL?雖然它似乎沒有工作。如何從運行Windows Server 2003 64位版本的C#調用32位C DLL?

我必須註冊一些特殊的註冊表或東西的32位C DLL?

我使用Windows Server 2003 64位。

的錯誤是:

Runtime Error! 
[Path to dll] 
R6034 
An application has made an attempt to load the C runtime library incorrectly. 
+0

平臺目標設置爲86 *應*足矣。你會得到什麼錯誤信息? – Heinzi 2009-11-23 16:56:20

+0

錯誤是: 運行時錯誤! [路徑到DLL] R6034 應用程序已做出了嘗試正確裝載C運行時庫。 – CodingThunder 2009-11-23 17:02:45

回答

2

你是正確的。如果你的平臺設置爲x86,你的32位DLL應該可以正常工作。

如果不是的話,這裏有一些事情要檢查:

  1. 確保DLL被發現。這通常意味着將其包含在與應用程序的EXE相同的文件夾中。
  2. 確保所有通過您的DLL所需的依賴關係的存在(並發現)系統上。這通常意味着安裝正確的VC++可再發行組件。
  3. 如果您使用的是32位的COM組件,確保在系統上註冊的組件。

編輯:看到你的留言後,您的問題是由於DLL not having a proper manifest。如果你embed a manifest in the DLL,它應該能夠妥善解決的正確C運行時,並加載它(提供了正確的運行時安裝在部署機器上。)

+0

該C DLL是來自第三方,我沒有來源。是否可以添加沒有源代碼的清單?謝謝 – CodingThunder 2009-11-23 17:25:23

+0

是的,使用mt.exe。否則,只要確保適當的運行時間是本地的,它通常仍然工作。 – 2009-11-23 18:17:45

相關問題