发新话题
打印

[转载]在C#中动态调用Native dll的导出函数

[转载]在C#中动态调用Native dll的导出函数

在C#中动态调用native dll的导出函数

信息来源:邪恶八进制信息安全团队(www.eviloctal.com

  在 C++ 中我们能够通过 LoadLibrary, GetProcAddress 来动态调用 dll 的导出函数。

  在 C# 中也能够用这样的方式吗?

  在 DotNet 2.0 里面这样是可以的, 这完全得益于 2.0新增的一个函数

  Marshal.GetDelegateForFunctionPointer 方法

  此方法在 .NET Framework 2.0 版中是新增的。

  将非托管函数指针转换为委托。

  实例代码如下:

  public delegate int MsgBox(int hwnd,string msg,string cpp,int ok);
  [DllImport("Kernel32")]
  public static extern int GetProcAddress(int handle, String funcname);
  [DllImport("Kernel32")]
  public static extern int LoadLibrary(String funcname);
  [DllImport("Kernel32")]
  public static extern int FreeLibrary(int handle);
  private static Delegate GetAddress(int dllModule, string functionname, Type t)
  {
  int addr = GetProcAddress(dllModule, functionname);
  if (addr == 0)
  return null;
  else
  return Marshal.GetDelegateForFunctionPointer(new IntPtr(addr), t);
  }
  private void button1_Click(object sender, EventArgs e)
  {
  int huser32 = 0;
  huser32 = LoadLibrary("user32.dll");
  MsgBox mymsg = (MsgBox)GetAddress(huser32, "MessageBoxA", typeof(MsgBox));
  mymsg(this.Handle.ToInt32(), txtmsg.Text, txttitle.Text , 64);
  FreeLibrary(huser32);
  }
  
Delphiscn Blog
http://blog.csdn.net/delphiscn

TOP

发新话题