2013-09-26 60 views
3

我將MyAssembly.dll作爲附加引用添加到我的查詢中,並且工作正常:我可以毫無困難地使用它的各種類。LINQPad:嘗試使用使用[DllImport]訪問C++的程序集dll

MyAssembly.dll中某個類的方法之一引用另一個dll(Wrapper.dll)。 Wrapper.dll使用[的DllImport]在C++ DLL(C.dll)來訪問的功能:

[的DllImport( 「C.dll」,CallingConvention = CallingConvention.StdCall,入口點= 「CPlusPlusFunction」)] 內部static extern UInt32 _CPlusPlusFunction([MarshalAs(UnmanagedType.LPWStr)] string file_path);

儘管這種方法在從引用MyAssembly.dll(引用Wrapper.dll,引用C.dll)的MyApp.exe執行時工作得很好,但在LINQPad中我無法使它工作。

如果我只添加了MyAssembly.dll程序參考,並嘗試運行的方法,我得到:

DllNotFoundException:無法加載DLL「C.dll」:指定的模塊找不到。 (異常來自HRESULT:0x8007007E)

如果我只是爲Wrapper.dll添加一個額外的參考,我會得到相同的錯誤。

如果我添加兩個Wrapper.dll和C.dll的附加參考,我得到:

元數據文件「C.dll」無法打開 - 「試圖加載程序的格式不正確。「

如果我只是爲C.dll添加額外的參考,我會得到相同的錯誤。

有關我如何在LINQPad中使用它的任何想法,就像它在MyApp.exe中一樣?

回答

2

你可以用完全相同的方法做到這一點,你必須將它複製到與EXE相同的目錄中,以便Windows可以找到它。在這種情況下的LINQPad EXE。 C:\ Program Files(x86)\ LINQPad4默認。或者PATH上的任何目錄,c:\ windows \ syswow64都是臭名昭着的選擇。最好不要這樣做。

+1

感謝漢斯,那就是訣竅。 事實證明,您也可以將.dll放在與.linq腳本相同的目錄中。 – James

+0

如果Windows在當前工作目錄(Environment.CurrentDirectory)中,它也可以找到一個DLL。當LINQPad將目錄更改爲腳本時,不太可能工作。這往往是有點打擊和小姐,但。 –