Swig转c++ lib项目到c#可引用的dll

swig 是一个工具,可以将c,c++代码转换成c#,java,perl,tcl,ruby等等语言,官网介绍如下

http://www.swig.org/Doc1.3/SWIG.html#SWIG_nn2

 

个人目标:c++ lib 项目转成c#可直接引用的dll

 

从头讲起,以下皆使用vs 2008

1. lib项目

1.1 vs,新建项目->选择Win32项目(项目名:lib-test)->选择静态库lib

1.2 解决方案资源器中选择项目,右键选择添加类->c++类->输入类名libXiao等,一路next,自动生成libXiao.h和libXiao.cpp

1.3 在.h中加入int add(int i,int j);声明,在.cpp中加入add函数实现代码

1.4 生成解决方案

 

接下来需要两个项目来完成转化,一个(c++ dll项目类型)利用swig来生成c#类文件和c++ dll,另一个(c# 类库项目类型)利用生成的dll和c#文件来生成其他c#项目可以直接引用的dll。 

 

2. 使用swig生成c#类文件和c++ dll

2.1 vs,新建项目->选择Win32项目(项目名:swig-test)->选择dll

2.2 删除项目生成的所有文件,在项目属性->配置属性->c/c++->预编译头->创建/使用预编译头,选择”不使用预编译头“

2.3 在本地创建一个test.i文件

2.4 解决方案资源器中选择资源文件,右键选择添加现有项,添加刚生成的.i文件(不创建规则)
2.5 编辑test.i文件 

 

%module Test 

%include <windows.i>

 

%{

#include "libXiao.h"

%}

 

%include "E:/Mine/lib-test/lib-test/libXiao.h"

 

 

2.6 在项目属性->配置属性->生成事件->命令行中输入

swig -c++ -csharp -o test_wrap.cpp -namespace "Xiao.Test" -outdir $(SolutionDir)ClassLibrary1 -dllimport swig-test test.i

 

注:$(SolutionDir)ClassLibrary1为接下来使用的c#的项目的路径,根据自己情况决定

-dllimport swig-test 的参数值为dll的名称,这点需要注意,如果%module跟dll名称一致则不需要此参数,这个会影响生成的c#类文件中的dllImport的名称,如 [DllImport("swig-test", EntryPoint="SWIGRegisterExceptionCallbacks_Test")]

 

2.7 在项目属性->配置属性->链接器->输入->附属依赖项中输入lib-test.lib的路径E:/Mine/lib-test/Debug/lib-test.lib

2.8 生成解决方案,会自动生成test_wrap.cpp

2.9 解决方案资源器中选择源文件,添加test_wrap.cpp,生成解决方案

2.10 生成了swig-test.dll和libXiao.cs,Test.cs,TestPINVOKE.cs

 

3. 利用生成的dll和c#文件来生成其他c#项目可以直接引用的dll

3.1 可以在2中的解决方案中添加一个c#项目,类型为类库,项目名ClassLibrary1

3.2 删除项目默认生成的cs文件

3.3 添加2中生成的所有产出:swig-test.dll,libXiao.cs,Test.cs,TestPINVOKE.cs

3.3 修改项目属性->应用程序->默认命名空间为Xiao.Test

3.4 生成解决方案

3.5 生成test.dll

 

至此所有的工作就已经完成了,接下来就可以添加引用test.dll到c#项目中使用

using Xiao.Test;

...

 

Xiao.Test.libXiao l = new libXiao();

int i = l.add(1, 12);

MessageBox.Show(i.ToString());

 

 

需要注意的是由于test.dll依赖于swig-test.dll这个c++生成的dll所以我们使用的时候需要把swig-test.dll能让程序访问,可以把它放到程序运行的当前目录下或者system32或者环境变量包括的路径中。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值