2015-11-04 74 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,这是加载模块的唯一受支持的方式。 –