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

时间:2010-02-21 09:37:22  来源:第二电脑网  作者:第二电脑网

  第二电脑网导读:ateForFunctionPointer 方法   此方法在 .NET Framework 2.0 版中是新增的。      将非托管函数指针转换为委托。   实例代码如下:         public delegate int MsgBox(int hwnd,string msg,string cpp,int ok);       [DllImport(&q...
  正文:在 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);
   }
  
在 C# 中动态调用 native dll 的导出函数》由第二电脑网原创提供,转载请注明:http://www.002pc.com/master/College/Programming/aspnet/12851.html


关键字:

关于《在 C# 中动态调用 native dll 的导出函数》文章的评论

站内搜索: 高级搜索

热门搜索: Windows style 系统 tr IP QQ CPU 安装 function 注册 if td