如何使用 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。任何执行此操作的代码都是使用不受支持的黑客来执行此操作。系统提供 LoadLibrary
、LoadLibraryEx
等来执行此任务,它们要求 DLL 存在于磁盘上。
您的 DLL 是一个混合模式的 .net 程序集,它需要加载程序进行特殊处理。调用 LoadLibrary
、LoadLibraryEx
等调用的系统加载程序知道如何执行加载混合模式 .net 程序集所需的操作。 BTMemoryModule 代码不执行这些特殊操作。
如果您要能够从内存加载此类模块,则需要找到支持此类模块的库,或者编写您自己的加载程序代码。坦率地说,我怀疑这样的图书馆是否存在。更现实地说,您应该从磁盘加载 DLL。
我有一个用 C# 编写的 DLL,它使用 Robert Giesecke 的 UnmanagedExports 库并使用 [DllExport]
导出函数。
我可以用 LoadLibrary
很好地加载它,并调用它的导出函数。当我尝试使用 BTMemoryModule
将其加载到内存中时,调用入口点 (DllMain - DLL_PROCESS_ATTACH) TDllEntryProc
(在函数 BTMemoryLoadLibary
中)returns false。如何使用 BTMemoryModule
.
不支持从内存中加载 DLL。任何执行此操作的代码都是使用不受支持的黑客来执行此操作。系统提供 LoadLibrary
、LoadLibraryEx
等来执行此任务,它们要求 DLL 存在于磁盘上。
您的 DLL 是一个混合模式的 .net 程序集,它需要加载程序进行特殊处理。调用 LoadLibrary
、LoadLibraryEx
等调用的系统加载程序知道如何执行加载混合模式 .net 程序集所需的操作。 BTMemoryModule 代码不执行这些特殊操作。
如果您要能够从内存加载此类模块,则需要找到支持此类模块的库,或者编写您自己的加载程序代码。坦率地说,我怀疑这样的图书馆是否存在。更现实地说,您应该从磁盘加载 DLL。