2015-11-04 47 views
1

我有一個用C#編寫的DLL,它使用Robert Giesecke的UnmanagedExports庫並導出與[DllExport]函數。如何使用BTMemoryModule從Delphi調用混合模式C#dll?

我可以用LoadLibrary加載它,並調用它的導出函數。當我嘗試使用BTMemoryModule將它加載到內存中時,入口點(DllMain - DLL_PROCESS_ATTACH)TDllEntryProc(在函數BTMemoryLoadLibary中)的調用返回false。我如何使用BTMemoryModule加載這樣的DLL。

回答

1

從內存加載DLL不是不受支持的。任何執行此操作的代碼都使用不受支持的黑客程序來執行此操作。系統提供了LoadLibrary,LoadLibraryEx等來執行此任務,並且它們需要DLL存在於磁盤上。

你的DLL是一個混合模式的.net程序集,它需要加載程序的特殊處理。通過調用LoadLibrary,LoadLibraryEx等調用的系統加載程序知道如何執行加載混合模式.net程序集所需的操作。 BTMemoryModule代碼不執行這些特殊操作。

如果你打算能夠從內存中加載這樣一個模塊,你將需要找到一個支持這些模塊的庫,或者編寫你自己的加載器代碼。坦率地說,我懷疑這樣的圖書館是否存在。更現實一點,你應該從磁盤加載DLL。

+0

知道這些特殊行爲是......很有意思,或者在哪裏找出它應該是什麼。 – GregorM

+0

他們沒有記錄。您可以簡單地從磁盤加載DLL,這是加載模塊的唯一受支持的方式。 –