如何在不將可執行文件複製到同一目錄的情況下使用免註冊的COM對象?這可能嗎?註冊免費的COM沒有將dll複製到與可執行文件相同的目錄
我想要一個完整的工作示例或詳細的分步指南,瞭解我的確切場景。
例如,我有以下組成部分:
CppTestRunner.exe - VC++控制檯應用程序
CppTests.dll - VC++ MFC DLL
CsCOMServer.dll - C#COM DLL可見
我不想修改exe或其目錄,如添加外部清單。
CppTests.dll與exe不在一個目錄中。
如果CsCOMServer.dll與CppTests.dll位於同一目錄中,那麼可以。
CppTestRunner.exe調用CppTests.dll上的LoadLibrary,它工作正常。
在嵌入清單並使用Windows激活上下文apis之後,我能夠將CsCOMServer.dll複製到exe目錄以驗證CppTests.dll是否可以創建CsCOMServer.dll的實例而沒有問題,但是我仍然試圖避免這一步。
目前,隨着CsCOMServer.dll在同一目錄CppTests.dll,沒有CsCOMServer.dll在exe文件的目錄,我收到以下錯誤,當我調用CoCreateInstance:
錯誤= 0x80070002系統無法找到指定文件。
我使用Sysinternals的進程監視器追查路徑CppTestRunner.exe看起來在等
我注意到的是,根據事情我嘗試做,有時CppTestRunner.exe嘗試讀取CsCOMServer.dll.config在與CppTests.dll相同的目錄,但無論我嘗試在那裏放置什麼內容,都無法解決錯誤。
也取決於我嘗試做的其他事情,CppTestRunner.exe嘗試讀取與CppTests.dll相同的目錄中的CsCOMServer.dll,但出於某種原因,我仍然收到相同的錯誤。
任何人都知道這個確切的情況下工作代碼?如你所知道的,這是某些單元\集成測試的一部分。
作爲一種簡單的解決方法,我目前複製CppTestRunner.exe到同一目錄CppTests.dll,並從那裏運行它,但想避免此步驟。
謝謝。
謝謝。那麼你是說這是不可能的? –
這是不可能的,所以你的解決方法似乎是一個體面的方法。 –