是否有将本机 dll 中的 DllImport 函数作为字节数组加载到 RAM 中?

问题描述 投票:0回答:2

不管听起来多么奇怪,我需要它O_o 好吧,另一个解决方案,如果可以将本机 DLL 作为字节数组加载到 RAM 中,但从那里调用函数而不需要 DllImport >_<

有点这样:

byte[] dll_data = File.RealAllBytes("native.dll"); //this is just example, in real architecture bytes comes from another source and should never be stored on HDD
//uhh... ohh... do something to call exported function named "WeirdNativeFunction"
c# runtime arrays dllimport native-code
2个回答
2
投票

您需要调用适当的方法将本机 DLL 加载到调用进程中。 GitHub 上的 MemoryModule 项目提供了一个(本机)API 来处理此问题,您可以在 C++/CLI 项目中使用它。

native.dll
加载到进程中后,您可以使用 P/Invoke 调用 GetProcAddress 来获取
"WeirdNativeFunction"
的句柄,并使用
Marshal.GetDelegateForFunctionPointer
将其转换为托管委托,您可以将其转换为托管委托。然后就可以打电话了。


0
投票

有人将MemoryModule移植到c#: https://github.com/dretax/DynamicDllLoader

© www.soinside.com 2019 - 2024. All rights reserved.