http://www.cyqdata.com/cnblogs/article-detail-31713
想要用C#開發Subversion,當只有c/c++開源API,所以決定根據Subversion的要求使用swig
先寫一個簡單過程,防止自己忘記了,以後再詳細修改
準備工作:
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非常偉大!