swig C# 链接c++ dll
时间:2011-03-04 来源:SongSharp
先写一个简单过程,防止自己忘记了,以后再详细修改
准备工作:
vs2010 C#,c++ 版本其实不重要,呵呵
登录swig官方,下载 swigwin-2.0.2。以下是下载地址,选择好c#,window 就可以下载
http://www.swig.org/survey.html
解压缩后
设置 系统属性》高级》环境变量》系统变量 下 Path 添加你的解压缩后的目录
我解压E:\后重命名文件夹为swigwin,就在Path 下后面添加 ;E:\swigwin (注意前面有个分号)
现在写一个.h和.cpp
Swiglib.h
代码如下:
#pragma once
class Swiglib
{
public:
Swiglib(void);
~Swiglib(void);
int AaddB(int a,int b);
};
Swiglib.cpp
代码如下:
#include "Swiglib.h"
Swiglib::Swiglib(void)
{
}
Swiglib::~Swiglib(void)
{
}
int Swiglib::AaddB(int a,int b)
{
return a+b;
}
(既然看这个,上面的代码就不解释了)
写一个swig使用的.i文件
我想这个算swig的配置文件吧,具体不了解
swig.i(文件名可以自己取,意义不大)
代码如下:
%module ModuleSwiglib
%{
#include "Swiglib.h"
%}
%include "Swiglib.h"
接着cmd
运行swig传入参数,当然,你要保证 swig.i,Swiglib.cpp,Swiglib.h
swig -c++ -csharp -o libswig.cpp -namespace "Swiglib " -dllimport Swiglib swig.i
解释一下:libswig.cpp 就是以后要编译出来的cpp文件,namespace 就是以后C#要引用的命名空间,生成后可以修改,dllimport 是libswig.cpp 生成出来的dll的名字,以后dll可以重命名来配对,最好能和dll名字一样
不懂继续往下看吧~~
执行以后生成ModuleSwiglib.cs,ModuleSwiglibPINVOKE.cs,libswig.cpp
(注意一下和)
先不管cs文件名称和swig.i中%module ModuleSwiglib一样就知道,前面的%module 的意义了
把libswig.cpp编译成dll文件
vs,新建项目》选择Win32项目(项目名:swig-test)->选择dll,空项目,项目命名为Swiglib
PS:项目名字要和dllimport 里面写的一样,因为vs生成dll是根据项目名称的,你也可以修改
把libswig.cpp,Swiglib.cpp,Swiglib.h放到工程里面。生成一下,去debug下面去拿dll吧,名字果然是Swiglib.dll
看看ModuleSwiglibPINVOKE.cs中
[DllImport("libswig", EntryPoint="CSharp_Swiglib_AaddB")]
public static extern int Swiglib_AaddB(HandleRef jarg1, int jarg2, int jarg3);
这个就是C#调用dll的代码,这个我们也可以调用window API(自己百度谷歌吧)
接着拿着ModuleSwiglib.cs,ModuleSwiglibPINVOKE.cs,Swiglib.dll
把记得要把Swiglib.dll放着系统path目录下或者程序相对目录下。
ModuleSwiglib.cs,ModuleSwiglibPINVOKE.cs应该就是连接Swiglib.dll C#类
然后,就可以
Swiglib sl=new Swiglib();
Console.WriteLine(sl.AaddB(1, 2));
因为是事后写的,如有错误大家报错~~
处女作,呵呵,以后再细细补充
公司需要Subversion,目前也在管理Subversion
SVN客户端开源软件很多
感觉管理端的软件非常少,所以开始了解,班余写写代码
对Subversion感兴趣的朋友可以聊聊,我只是刚刚开始
Subversion非常伟大!