不管听起来多么奇怪,我需要它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"
您需要调用适当的方法将本机 DLL 加载到调用进程中。 GitHub 上的 MemoryModule 项目提供了一个(本机)API 来处理此问题,您可以在 C++/CLI 项目中使用它。
将
native.dll
加载到进程中后,您可以使用 P/Invoke 调用 GetProcAddress 来获取 "WeirdNativeFunction"
的句柄,并使用 Marshal.GetDelegateForFunctionPointer
将其转换为托管委托,您可以将其转换为托管委托。然后就可以打电话了。
有人将MemoryModule移植到c#: https://github.com/dretax/DynamicDllLoader