利用P/Invoke Interop Assistant写一个最简单的CLR程序


刚刚听过 MSDN Webcast关于P/invoke的讲座,讲师张羿做了一个最简单的调用 user32.dll 的 MessageBox 函数的范例。让我想起当年学VB6时的API调用,是一个道理。记得那时候就有一个 API 辅助查询工具,P/Invoke Interop Assistant 与那个功能类似,使用它就不必自己去查找 MSDN 或者程序的头文件信息了,甚至不必自己去写诸如 DllImport、DllImportAttribute 这样的语句。直接查找需要的 API,然后生成代码粘到 .NET 工程里就是了。当然,对于外部DLL函数调用,还是需要手写的。

这个工具很早前就存在,至今只有英文版本,是个非常小的工具。
下载网址: http://msdn.microsoft.com/en-us/magazine/cc164193.aspx
或者直接点击这里下载: CLRInsideOut2008_01.exe
运行解压后执行 winsiggen.exe 就可以了,如下图:
把找到的函数代码和常量代码复制到 .NET 工程里,如下图:

在Main函数里写上测试代码,运行下就出现了,是不是很方便?



呵呵~~ 从图片上看代码不清晰,下面是自己写一个简单的 user32.dll 的 MessageBox 调用:
  1. using System;   
  2. using System.Text;   
  3. using System.Runtime.InteropServices; //引入 InteropServices 命名空间   
  4.   
  5. namespace ConsoleApplication1   
  6. {   
  7.     class MyPinvoke   
  8.      {   
  9.          [DllImport("user32.dll", EntryPoint = "MessageBox")]   
  10.         public static extern int MessageBox(IntPtr hwnd, string text, string caption, uint type);   
  11.   
  12.         public const int MB_OK = 0; //type的常量 MB_OK=0 显示一个只有“确定”按钮的消息框   
  13.      }   
  14.   
  15.     class Program   
  16.      {   
  17.         static void Main(string[] args)   
  18.          {   
  19.              MyPinvoke.MessageBox(IntPtr.Zero, "Hello world.", "P/Invoke", MyPinvoke.MB_OK);   
  20.          }   
  21.      }   
  22. }  
注意这个例子,为了简便,调用的是 user32.dll 的 MessageBox 函数,而并不是上图在VS中调用 MessageBoxW 函数,但最终的运行结果与上图相同。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值