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

How can I call mixed mode C# dll from Delphi using BTMemoryModule?

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

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

加载这样的 DLL

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

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

如果您要能够从内存加载此类模块,则需要找到支持此类模块的库,或者编写您自己的加载程序代码。坦率地说,我怀疑这样的图书馆是否存在。更现实地说,您应该从磁盘加载 DLL。