linux社区爱心援助Linux认证系列教程业界动态站务新闻公司招聘网络学院网址大全LPI专题CISCO专题
设为首页
加入收藏
管理团队
JSP  
JAVA  
PERL  
 您的位置:首页 > 开发语言 > asp.net >
栏目导栏
  php
  JSP
  ASP
  asp.net
  JAVA
  c/c++/c#
  perl
  JavaScript
  Basic
  Delphi
资料搜索
热门文章
·NetBPM工作流的一个示例:请假
·Office Web Components(OWC)绘
·asp.net正则表达式语法
·asp.net 2.0 ajax中使用PopupC
·Ado.Net读取Excel常见问题总结
·数据源为空时如何让GridView显
·如何让UpdatePanel支持文件上传
·C#.Net的常见面试试题和参考答
·asp.net ajax客户端编程+jquer
·Brettle.Web.NeatUpload.dll支
·ASP.NET使用Cookie
·ASP.NET DEMO 15: 同时支持行单
·如何使IE的后退按钮无效
·如何在ASP.NET中用OWC绘制图表
·asp.net:正确判断当前用户角色
最新文章
·Ajax Control Toolkit Animati
·讨论一下类似BlogEngine内一次
·使用CSS+SiteMap+UserControl+
·Asp.net中多彩下拉框的实现
·浅谈ASP.NET的Postback
·分清ASP.NET AJAX中的Extender
·Tip:在使用AjaxControlTookit
·有关注册DataItem的一些可能被
·IIRF(Ionic's Isapi Rewrite
·asp.net 客户端回调功能的实现
·关于控件部分的看法--读Progra
·为什么在vista上做开发
·如何封装JS和CSS文件为服务器端
·岂今我看过的最强的排序算法
·设计模式学习笔记之单件模式
Google
 
在 C# 中动态调用 native dll 的导出函数
[ 作者:  加入时间:2007-10-29 14:17:32  来自:Linux联盟收集整理 ]
在 C++ 中我们能够通过 LoadLibrary, GetProcAddress 来动态调用 dll 的导出函数. VXQLinux联盟
  在 C# 中也能够用这样的方式吗? VXQLinux联盟
  在 DotNet 2.0 里面这样是可以的, 这完全得益于 2.0新增的一个函数 VXQLinux联盟
  Marshal.GetDelegateForFunctionPointer 方法 VXQLinux联盟
  此方法在 .NET Framework 2.0 版中是新增的。 VXQLinux联盟
   VXQLinux联盟
  将非托管函数指针转换为委托。 VXQLinux联盟
  实例代码如下: VXQLinux联盟
   VXQLinux联盟
   VXQLinux联盟
  public delegate int MsgBox(int hwnd,string msg,string cpp,int ok); VXQLinux联盟
   VXQLinux联盟
   [DllImport("Kernel32")] VXQLinux联盟
   public static extern int GetProcAddress(int handle, String funcname); VXQLinux联盟
   [DllImport("Kernel32")] VXQLinux联盟
   public static extern int LoadLibrary(String funcname); VXQLinux联盟
   [DllImport("Kernel32")] VXQLinux联盟
   public static extern int FreeLibrary(int handle); VXQLinux联盟
   VXQLinux联盟
   private static Delegate GetAddress(int dllModule, string functionname, Type t) VXQLinux联盟
   { VXQLinux联盟
   int addr = GetProcAddress(dllModule, functionname); VXQLinux联盟
   if (addr == 0) VXQLinux联盟
   return null; VXQLinux联盟
   else VXQLinux联盟
   return Marshal.GetDelegateForFunctionPointer(new IntPtr(addr), t); VXQLinux联盟
   } VXQLinux联盟
   VXQLinux联盟
   private void button1_Click(object sender, EventArgs e) VXQLinux联盟
   { VXQLinux联盟
   int huser32 = 0; VXQLinux联盟
   huser32 = LoadLibrary("user32.dll"); VXQLinux联盟
   MsgBox mymsg = (MsgBox)GetAddress(huser32, "MessageBoxA", typeof(MsgBox)); VXQLinux联盟
   mymsg(this.Handle.ToInt32(), txtmsg.Text, txttitle.Text , 64); VXQLinux联盟
   FreeLibrary(huser32); VXQLinux联盟
   } VXQLinux联盟
   VXQLinux联盟
Linux联盟收集整理 ,转贴请标明原始链接,如有任何疑问欢迎来本站Linux论坛讨论
评论】【加入收藏夹】【 】【打印】【关闭
※ 相关链接
无相关信息