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

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更精确,嗯。

转载于:https://www.cnblogs.com/gxh973121/archive/2006/04/07/369107.html

P/Invoke with SWIG相关推荐

  1. 《精通.NET互操作:P/Invoke、C++ Interop和COM Interop》

    <精通.NET互操作:P/Invoke.C++ Interop和COM Interop>官方博客 一篇用C++/CLI讲述在托管委托(delegate)和非托管函数指针之间相互转化的文章 ...

  2. swig error : Unrecognized option -doxygen Ubuntu 安装 swig-3.0.12

    1. 下载 下载地址:https://sourceforge.net/projects/swig/ 2. 安装 tar -xzvf swig-3.0.12.tar.gzcd swig-3.0.12# ...

  3. pip install faiss-gpu失败unable to execute ‘swig‘: No such file or directory

    1. 安装报错 unable to execute 'swig': No such file or directory error: command 'swig' failed with exit s ...

  4. java.lang.NullPointerException: Attempt to invoke virtual method ‘boolean java.lang.String.equals(j

    今天切正式环境出现的空指针 记录一下 下面是错误 java.lang.NullPointerException: Attempt to invoke virtual method 'boolean j ...

  5. C#WinForm的线程及Invoke应用(转)

    C#多线程异步访问winform中控件 http://zwkufo.blog.163.com/blog/static/25882512009111453957552/?fromdm&fromS ...

  6. 在 C# 中通过 P/Invoke 调用Win32 DLL

    ,.NET Framework 1.0 或 1.1 版类库中存在任何 Windows 所没有的功能限制都不足为怪.毕竟,32 位的 Windows(不管何种版本)是一个成熟的操作系统,为广大客户服务了 ...

  7. Java动态加载一个类的几种方法以及invoke

    一.加载一个类的几种方法 接口 IUser package org.me.javaapp;/**** @author Administrator*/ public interface IUser {} ...

  8. linux+swig+python,linux下使用swig让python调用C++(复杂版:包括多文件调用和链接库)...

    第一次用swig,网上找了各种资料,比如 http://www.cnblogs.com/kaituorensheng/p/4464117.html 入门可以看上面这个链接 但要么过于简单要么过于复杂 ...

  9. ajax invoke error,配置全局的异常捕获时,走ajax请求下面报错

    org.apache.catalina.core.StandardWrapperValve invoke 严重: Servlet.service() for servlet [dispatcherSe ...

最新文章

  1. 干掉Spring Cloud,这个框架是微服务的未来!
  2. paper 123: SVM如何避免过拟合
  3. Java输入两个正整数m和n,求其最大公约数和最小公倍数。
  4. swarm 本地管理远程_带有WildFly Swarm的远程JMS
  5. Linux 题目总结
  6. [luoguP2324] [SCOI2005]骑士精神(A*?)
  7. 主动风险管理:警报如洪水怎么破?
  8. mysql8.0 安装 修改密码 允许远程连接
  9. 信息系统管理工程师考前复习笔记一
  10. 代码整洁之道 python_代码整洁之道
  11. 我是如何入门机器学习的呢
  12. 查看win10电脑电池损耗
  13. 选择商品的时候,弹不出来商品选择框
  14. php自动上传到onedrive,让iPhone里的照片自动上传备份到OneDrive
  15. 3小时做完3天工作,她是用了什么办法做到的?
  16. 通过快递100获取快递单号,结合c-lodop热敏纸打印 – 通过菜鸟ISV/自研ERP使用菜鸟电子面单...
  17. Web安全学习day01
  18. git pull 和 git fecth 的区别
  19. vector 排序方法sort的使用
  20. Git - git push origin master 报错的解决方法

热门文章

  1. cannot find package ...
  2. 速看!你的反链不一定有用!
  3. Python统计西游记妖怪出场次数(使用jieba分词)
  4. R语言作图——Circular bar plot(环形柱状图)
  5. 有什么笑得停不下来的冷笑话?
  6. 互联网的主流与非主流
  7. Management Accounting for Business Decisions读书笔记
  8. 一建各专业通过率是多少 一建好考还是注安好考
  9. python123判断火车票座位号分布图_火车座位分布图
  10. 神仙打架 || 聊天宝、多闪、马桶MT宣战微信,你pick哪一个?