还是说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. Dubbo 入门实例 本地伪集群测试Demo
  2. 第十四次ScrumMeeting博客
  3. window之hosts
  4. 如何在树莓派上进行python编程_《树莓派Python编程指南》怎么样_目录_pdf在线阅读 - 课课家教育...
  5. mysql like in 数组_Web前端学习教程之常用的MySQL优化技巧
  6. java数组重复_JAVA数组去除重复数据
  7. python图像压缩主成分分析实例_python机器学习API介绍13: 数据降维及主成分分析...
  8. linux mysql 配置root_Linux配置(mysql安装篇)
  9. QTP11.5/UFT官方下载与安装
  10. js登录界面使用ajax连接数据库,js用ajax连接数据库数据
  11. 胶印润版液消泡剂用来胶印润版液除泡问题处理得干干净净
  12. Android桌面小插件——Widget
  13. 清理所有的java注册表_一些陈旧的注册表垃圾清理脚本:注册表冗余数据清理.reg...
  14. JVM:垃圾收集器与内存分配策略
  15. provide和inject的用法
  16. show和shown区别
  17. VS项目中配置matplotlib-cpp绘制图片
  18. js中click()与onclick()的区别
  19. 浅谈APO PPDS 与传统MRP的区别(二)
  20. ISO20000度量体系指标

热门文章

  1. 100行左右的java动物类型大作业_求一个100行左右的java编程
  2. 计算机组成原理 | 第三章《运算方法和运算部件》学习笔记
  3. Sql Server 使用 SET NOCOUNT { ON | OFF}
  4. 网络安全的重要性及应对策略
  5. Go 事件驱动 实现事件的晌应和处理
  6. 用JS写的一个简单的导航栏
  7. 伊斯坦布尔之旅第三天:塔克西姆广场和独立大街和加拉太大桥
  8. Low CP Rank and Tucker Rank Tensor Completion for Estimating Missing Components in Image Data论文笔记
  9. FASTQ质控软件FASTP下载和运行
  10. 运维工程师必备技能之操作系统运维(二)