首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 编程语言 > .NET > C#.NET > P/Invoke with SWIG
【标  题】:P/Invoke with SWIG
【关键字】:P/Invoke,with,SWIG
【来  源】:http://blog.joycode.com/sunmast/archive/2006/04/07/p_invoke_with_swig_intro.aspx

P/Invoke with SWIG

还是说P/Invoke,不过这回不大一样,因为我找到了一个工具来帮忙了,而不是用极易出错的方式手工进行操作,这个工具就是SWIG:Simplified Wrapper and Interface Generator。

SWIG image

HOME:http://www.swig.org/
WIKI:http://www.dabeaz.com/cgi-bin/wiki.pl
WIKIPEDIA:http://en.wikipedia.org/wiki/SWIG

这玩意儿居然可以根据C/C++的头文件直接生成出各种脚本语言的包装类,包括Lua、Tcl、Perl、Python、Ruby、Guile、Chicken、PHP、Java、C#、Ocaml(见WIKIPEDIA上面的介绍)。不仅如此,它和我以前看到的几个类似的工具不同,它似乎还带了一个C/C++编译器前端,可以利用语义分析过程处理各种#include、#define、typedef等等造成的复杂情况,和一般的依赖于文本替换的类似工具根本就不在一个重量级。

对于C#,它自动生成的代码大量应用了P/Invoke,产生了大量的static extern声明。不过,它们对包装类的使用者来讲是透明的。比如,原来C++的class会被自动对应到一个C#的class,你能看到的就是它的property和medhod而已,和普通C#的class没什么两样。

我在它的Example文件夹下面看到了好多例子,关于C#的有class、enum、funcptr、reference、simple、template、variables。注意到,很多原本很难通过P/Invoke调用的Native元素比如C++类型、方法指针、C++模版类/方法,它都能支持,摆脱了P/Invoke只能用于Invoke结构体和C导出函数的局限。也许C++有很多更复杂的语法或用法它还没能支持(我不确定,这个还有待继续研究),但也已经相当NB了。

真是相见恨晚啊,早知道有这个东西,就不会有这个post存在了

BTW,
中国的太监们居然把WIKIPEDIA这么好的网站都给阉了,实在是匪夷所思。好在通过IP还是可以访问;再懒一点,可以改一下你的hosts文件(%windir%\system32\drivers\etc),在最后面接上这么几行:

145.97.39.155 www.wikipedia.org
145.97.39.155 en.wikipedia.org
145.97.39.155 zh.wikipedia.org
145.97.39.155 upload.wikimedia.org

学新东西的时候WIKIPEDIA还是很有用的,特别是那些专业词汇,找起来比GOOGLE更精确,嗯。

flash与php交互学习笔记 <<续>>flash+php+mysql:【上一篇】
我的个人主页:【下一篇】
【相关文章】
  • Getting Started With JasperReports
  • Working with VARRAYs in Oracle Part I
  • Working with VARRAYs in Oracle - Part II
  • Working with VARRAYs in Oracle Part III
  • Just SQL Part V – Counting with SQL
  • Playing With MODELs: Oracle 10g SQL Enhancements
  • Managing Listeners with lsnrctl
  • Install iSCSI target for Linux with kernel 2.6.14
  • 推荐存储原著好书《Building SANs With Brocade Swithches》
  • Setting up webmail with SquirrelMail
  • 【随机文章】
  • 使硬盘长寿的维护十五招
  • 循序渐进学习Power Builder 6.0--第二章 PowerBuilder 入门(3)
  • 软件项目常见问题
  • 如何实现路由器的本地验证和授权(转)
  • 图表制作好帮手MS Visio
  • 编写一个运行于 Pocket PC 上的离线新闻阅读软件(2)
  • 今天早上公交车上想到的系统的实现模式
  • [郑群 原创]我研究的地形碰撞检测方法
  • Google Code Search代码搜索
  • WWF的网站使用了新的.NET Framework 3.0的域名
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 软讯网络 All Rigths Reserved.