如何使用BTMemoryModule从Delphi调用混合模式的C#dll

本文关键字:混合 模式 C#dll 调用 Delphi 何使用 BTMemoryModule | 更新日期: 2023-09-27 18:20:27

我有一个用C#编写的DLL,它使用Robert Giesecke的UnmanagedExports库,并使用[DllExport]导出函数。

我可以用LoadLibrary很好地加载它,并调用它导出的函数。当我尝试使用BTMemoryModule将其加载到内存中时,入口点(DllMain-DLL_PROCESS_ATTACH)TDllEntryProc(在函数BTMemoryLoadLibary中)的调用返回false。如何使用BTMemoryModule加载这样的DLL。

如何使用BTMemoryModule从Delphi调用混合模式的C#dll

不支持从内存加载DLL。任何这样做的代码都是使用不受支持的黑客。系统提供LoadLibraryLoadLibraryEx等来执行此任务,并且它们要求DLL存在于磁盘上。

你的DLL是一个混合模式的.net程序集,它需要加载程序进行特殊处理。通过调用LoadLibraryLoadLibraryEx等调用的系统加载器知道如何执行加载混合模式.net程序集所需的操作。BTMemoryModule代码不执行这些特殊操作。

如果你想从内存中加载这样的模块,你需要找到一个支持这样的模块的库,或者编写自己的加载程序代码。坦率地说,我怀疑这样一个图书馆的存在。更现实地说,你应该从磁盘加载DLL。