2016-04-26 61 views
1

我想引用一個.net DLL(稱之爲B.DLL),這基本上是一個淨第三方包裝(稱之爲C.dll),進入C++ MFC項目。我確實爲B.dll創建了tlb文件,並且能夠在MFC應用程序中實例化並調用它。MFC託管代碼引用

此刻,所有依賴關係,B.tlb,B.dll和C.dll都需要位於MFC應用程序的文件夾 中。我想要的,並且努力做到的是將這三個文件放在MFC執行文件夾的子文件夾中。

我試圖將B.dll配置文件的「privatePath」設置爲一個子文件夾,但據我瞭解,它不是需要設置但需要設置的.dll「privatepath」,但MFC應用程序(顯然hasn 「T有什麼,據我所知,因爲它不是一個.NET應用程序)

任何幫助表示讚賞。

+1

你肯定是在這種情況下最大化DLL地獄解決方案,從來就沒有多大意義了這一點。 CLR在與somename.exe相同的目錄中查找somename.exe.config文件。所以你可以添加一個''元素來幫助它找到C.dll文件。 B.dll只能通過使用Regasm.exe命令中的/ codebase選項來找到,您需要使用該選項來註冊程序集,或者通過向mfc應用程序提供一個帶有「」元素的清單。在用戶的機器上使用GAC來獲得COM依賴關係絕不是一個壞主意。 –

+0

爲什麼這個場景被認爲是DLL地獄?你能解釋一下嗎?因爲我無法想象如果沒有製作.net dll包裝並將其註冊爲COM組件。 – ali

回答

0

你並不需要使用COM(如果你需要它我的回答是obsolet)。

你可以寫一個剛剛出口本地接口自己的C++/CLI的包裝DLL。除了調用你可以這個本地包裝器和這個包裝器再次加載你的.NET組件,並執行它的代碼。

在此包裝DLL,您可以添加您實現自己的搜索(也許在子目錄)的ResolveEventHandler。給你的CurrentDomain-> AssemblyResolve

添加使用此招,你避開這一切的COM的東西,你有完全的控制是組件應搜索的結果不能被加載。

我從here