2013-11-01 60 views
3

我在Visual Studio 2010中編寫了一個Shell擴展。 它實現了一個Context Menu Handler和File Icon Handler。模塊「MyShellExt.dll」加載失敗

在裝有Visual Studio的計算機上運行良好。但在其他計算機上,登記失敗MyShellExt.dll與消息

[窗口標題]

的RegSvr32

[內容]

模塊 「MyShellExt.dll」 加載失敗。

確保二進制文件存儲在指定路徑或調試到 檢查二進制或相關.DLL文件的問題。

無法找到指定的模塊。

[OK]

我已經檢查的依賴,發現遵循文件必須與MyShellExt.dll同一文件夾:msvcr100.dllmsvcp100.dllatl100.dll

這意味着我應該將這些庫包含到我的安裝包中。

如何關閉這些庫的使用?

+0

Project-> Setting-> Microsoft Foundation Classes,值爲「在MFC中使用MFC共享DLL「? – CodeJuan

回答

6

這些庫是C運行時,C++運行時和ATL運行時。您不能關閉前兩個,因爲這對於開始運行程序至關重要。但是,您可以靜態鏈接到它們,因此您不需要將它們作爲DLL運載。要做到這一點,你去你的項目設置C/C + +,代碼生成,運行時庫,並選擇「多線程」或「多線程調試」,而不是「多線程DLL」或「多線程調試DLL」。確保在所有的設置配置(調試,中繼等')

至於第三個庫(ATL100.dll),它可能會受到這種設置,以及我不知道。如果您停止使用從其導入的功能,則可以刪除它。依賴walker可以告訴你你從那個庫中使用了哪些函數。如果你不能停止使用該函數,那麼它的庫可能也有一個靜態版本(.lib文件,而不是.dll文件)

+1

對於atl100.dll需要更改此選項 - 項目屬性 - >配置屬性 - >常規 - >使用ATL - >「不使用ATL」或「靜態鏈接到ATL」,而不是「動態鏈接到ATL」 – barbaris

相關問題