2012-04-08 95 views
0

我有一個使用dll的ironpython應用程序。 一些用c#編寫的DLL,一個用託管的C++編寫。 該應用在我的主機上以及任何包含visual studio(2010)安裝的主機上都能正常工作。加載C++ dll在ironpython

當我試圖在沒有vs的主機上運行這個應用程序時,它失敗了。經過一番檢查後,我發現Ironpython無法加載C++ dll。 安裝vs之後 - 應用程序運行良好。

我把範圍縮小: - 微軟應用程序的錯誤報告 -VC 9.0運行時(86) -VC 10.0運行時(86) - 微軟的Visual Studio工具宏

:DLL可以安裝後上傳

我試圖安裝Microsoft Visual C++ 2010可再發行組件包http://www.microsoft.com/download/en/details.aspx?id=5555,它沒有辦法。

  1. 爲什麼?安裝vs時會發生什麼,當我安裝Microsoft Visual C++ 2010 Redistributable Package組件時不會發生這種情況?
  2. 如何監視使用ipy加載dll時出現的錯誤?

謝謝!

回答

1

以託管C++編寫的DLL使用DLL作爲其標準庫。您可以將其更改爲靜態庫。請按照以下步驟

  1. 打開在Visual Studio項目屬性(右鍵單擊該項目)
  2. 點擊你的方式來配置屬性> C++>代碼生成
  3. 在右邊,發現運行時庫,並選擇Multi-Threaded Debug (/MTd)
  4. 做發佈版本相同,但這次選擇Multi-Threaded (/MT)
  5. 重建所有

至於你的具體問題:

1.可再分發的安裝程序將複製DLL在系統路徑。 Visual Studio會做同樣的事情。因此,如果它不起作用,請確保您擁有32位或64位二進制文​​件(與您的代碼相同,而不是您正在運行的平臺)。 +如果您正在從控制檯運行,請關閉它並啓動一個新的路徑以獲取更新的路徑。

2.使用Dependency Walker。加載你的DLL會告訴你它正在尋找什麼,它應該是足夠的。爲了監視它的運行時執行,加載IronPython。在「配置文件」菜單中,選擇「啓動配置文件」並提供一個命令行來重現您的問題。

+0

好的,很好的答案,我的項目是多線程DLL(MD)而不是MT,正如你所說的,但是,不幸的是,因爲我使用了標籤「/ clr:oldsyntax」(並且需要使用它來編譯這一塊的代碼,因爲它包裝C代碼)我無法編譯MT模式下的項目... – 2012-04-08 14:45:38

+0

當你加載你的DLL時,DependencyWalker的輸出是什麼?你可以比較它在哪裏工作的機器上的輸出和它不工作的機器上的輸出 – ixe013 2012-04-08 14:52:59

+0

是的,我比較了它,發現問題在於我使用DEBUG構建而不是發佈構建。這就是爲什麼在安裝vs之後。 – 2012-04-10 10:49:44