P/Invoke with SWIG
还是说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相关推荐
- 《精通.NET互操作:P/Invoke、C++ Interop和COM Interop》
<精通.NET互操作:P/Invoke.C++ Interop和COM Interop>官方博客 一篇用C++/CLI讲述在托管委托(delegate)和非托管函数指针之间相互转化的文章 ...
- 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# ...
- 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 ...
- java.lang.NullPointerException: Attempt to invoke virtual method ‘boolean java.lang.String.equals(j
今天切正式环境出现的空指针 记录一下 下面是错误 java.lang.NullPointerException: Attempt to invoke virtual method 'boolean j ...
- C#WinForm的线程及Invoke应用(转)
C#多线程异步访问winform中控件 http://zwkufo.blog.163.com/blog/static/25882512009111453957552/?fromdm&fromS ...
- 在 C# 中通过 P/Invoke 调用Win32 DLL
,.NET Framework 1.0 或 1.1 版类库中存在任何 Windows 所没有的功能限制都不足为怪.毕竟,32 位的 Windows(不管何种版本)是一个成熟的操作系统,为广大客户服务了 ...
- Java动态加载一个类的几种方法以及invoke
一.加载一个类的几种方法 接口 IUser package org.me.javaapp;/**** @author Administrator*/ public interface IUser {} ...
- linux+swig+python,linux下使用swig让python调用C++(复杂版:包括多文件调用和链接库)...
第一次用swig,网上找了各种资料,比如 http://www.cnblogs.com/kaituorensheng/p/4464117.html 入门可以看上面这个链接 但要么过于简单要么过于复杂 ...
- ajax invoke error,配置全局的异常捕获时,走ajax请求下面报错
org.apache.catalina.core.StandardWrapperValve invoke 严重: Servlet.service() for servlet [dispatcherSe ...
最新文章
- 干掉Spring Cloud,这个框架是微服务的未来!
- paper 123: SVM如何避免过拟合
- Java输入两个正整数m和n,求其最大公约数和最小公倍数。
- swarm 本地管理远程_带有WildFly Swarm的远程JMS
- Linux 题目总结
- [luoguP2324] [SCOI2005]骑士精神(A*?)
- 主动风险管理:警报如洪水怎么破?
- mysql8.0 安装 修改密码 允许远程连接
- 信息系统管理工程师考前复习笔记一
- 代码整洁之道 python_代码整洁之道
- 我是如何入门机器学习的呢
- 查看win10电脑电池损耗
- 选择商品的时候,弹不出来商品选择框
- php自动上传到onedrive,让iPhone里的照片自动上传备份到OneDrive
- 3小时做完3天工作,她是用了什么办法做到的?
- 通过快递100获取快递单号,结合c-lodop热敏纸打印 – 通过菜鸟ISV/自研ERP使用菜鸟电子面单...
- Web安全学习day01
- git pull 和 git fecth 的区别
- vector 排序方法sort的使用
- Git - git push origin master 报错的解决方法
热门文章
- cannot find package ...
- 速看!你的反链不一定有用!
- Python统计西游记妖怪出场次数(使用jieba分词)
- R语言作图——Circular bar plot(环形柱状图)
- 有什么笑得停不下来的冷笑话?
- 互联网的主流与非主流
- Management Accounting for Business Decisions读书笔记
- 一建各专业通过率是多少 一建好考还是注安好考
- python123判断火车票座位号分布图_火车座位分布图
- 神仙打架 || 聊天宝、多闪、马桶MT宣战微信,你pick哪一个?