从指定文件byte[]内存数组加载非托管DLL API

时间:2014-12-26 10:46:28
【文件属性】:

文件名称:从指定文件byte[]内存数组加载非托管DLL API

文件大小:13KB

文件格式:DLL

更新时间:2014-12-26 10:46:28

内存加载非托管DLL 内存加载

C#可以很轻松从内存或资源加载托管DLL..但C++ kernel32.dll LoadLibrary只能加载指定路径非托管DLL..有了kernel.dll现在好了.可以像C#一样轻松从内存或资源里加载非托管DLL.. 从指定文件byte[]内存数组加载非托管DLL API 此DLL接口 FARPROC MemLoadLibrary(void* lpFileData, int nDataLength); FARPROC MemGetProcAddress(FARPROC handle,LPCSTR lpProcName); BOOL MemFreeLibrary(FARPROC handle); 模仿了kernel32.dll 的LoadLibrary操作方式..以下是C#调用示例 C#示例 #region " DllImport " [DllImport("kernel.dll", EntryPoint = "MemLoadLibrary")] public extern static IntPtr LoadLibrary(ref byte buf, int nLen); [DllImport("kernel.dll", EntryPoint = "MemGetProcAddress")] public extern static IntPtr GetProcAddress(IntPtr handle, String funcName); [DllImport("kernel.dll", EntryPoint = "MemFreeLibrary")] public extern static bool FreeLibrary(IntPtr handle); #endregion


网友评论

  • 原来就一个dll文件,不明不白的不敢用啊
  • 很好,可以正常使用
  • 用Managed C++封装吧
  • 就一个dll文件,拿来有什么用?需要的是源码
  • 好像不能用哦。。。
  • 这个等于脱裤子放P, 楼下说的很清楚了, 本来是想把dll打包到exe里, 用你这方法是把自己的dll放进去了, 可你这个dll又成了问题.
  • 光一个DLL文件,按你说的方法添加API,那你这个DLL还是用原来的路径加载模式先加载你这个DLL才能 进行BYTE[]来加载!不是很好用!
  • 就一个DLL有什么用 这里要的都是源码 没有源码就不要发表
  • 这个是代码吗,下载的可执行文件啊
  • 感谢分享,源代码有点问题,不过改完可用
  • 这段代码估计有问题,尝试后效果不好
  • 没跑起来...后来放弃了,还不如用c++.net封装为托管dll.再给c#引用呢.
  • C# 用不了 尝试读取或写入受保护的内存。这通常指示其他内存已损坏。