谁能出个详细的visual studio 使用swig的教程

oasistree 2009-03-03 09:18:44
文档很好很强大,网络上搜得案例也看得一头雾水,关键是步骤搞不懂啊。
假设我现在手头有test.c和test.i文件,我该怎么办?
...全文
2262 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
瑞爸鸥尘 2012-10-08
  • 打赏
  • 举报
回复
楼主 还在么?
我是大当家 2012-02-21
  • 打赏
  • 举报
回复
哥们,感谢了,我正为windows上用swig扩展php发愁呢,你这篇文章对我帮助很大。感谢。。。。
russellj 2011-03-20
  • 打赏
  • 举报
回复
这个例子不错。我终于测试通过了。
之前的例子不晓得是什么问题
oasistree 2009-12-19
  • 打赏
  • 举报
回复
sunchy2008 2009-12-09
  • 打赏
  • 举报
回复
本来想重新发帖的,好像是我的分不够不能发帖,就在斑竹的下面发一下咯!呵呵,放到一起,也好让后来者看起来方便一些!!
sunchy2008 2009-12-09
  • 打赏
  • 举报
回复
由于项目的原因需要在c#中使用Native c++的代码,刚好听过一个SWIG的报告。正好派上用场,开始的时候热情很足,但是实施起来还是会遇到很多的问题,有一点烦。

Step1:
首先是安装,我是在Windows平台下,所以下载swigwin。下载完以后解压,再将swig.exe的路径设置到环境变量,具体怎么做可以Google。有时候设置完环境变量还需要重启。

Step2:
然后就是写接口文件,这里我就不贴代码了,网上也有很多例子。

Step3:
假如有SWIGTest.cpp和SWIGTest.h,写一个SWIGTest.i然后生成wrap文件,采用下面的命令行格式:

$ swig -Wall -c++ -csharp -outdir $(SolutionDir)\ProjectCSharp\ -o $ SWIGTest_Wrap.cpp SWIGTest.i

-outdir是设置C#文件的输出路径,-o是设置wrap的cpp文件(它的文件名后缀还可以是cc或cxx)。

Step4:
然后是生成wrap的dll文件(这一步很关键开始我没弄明白,在C#项目中需要加入哪些文件。后来才知道要包括:step3导出的cs文件和下面要导出的dll文件):

新建一个Win32 Console Application工程,在向导中点next,Application type选择DLL,在Additional options中选择Emppty project。向Header Files中加入SWIGTest.h,向Source File中加入SWIGTest.cpp和SWIGTest_wrap.cpp,向工程中加入SWIGTest.i,这是可能会弹出一个对话框,我选的是'否 '。
然后build,将生成的dll文件放到你要使用的C#项目中,就可以了。

也许还有其他的方法,毕竟我也是新手和大家分享一下经验。哎浪费了一天的时间!另外还有几个网址,也许对大家有帮助,贴出来!
http://metasharp.net/index.php?title=Swig
http://blog.csdn.net/MapGuide_Inside/archive/2009/06/25/4296863.aspx


dijchen 2009-10-15
  • 打赏
  • 举报
回复
oasistree:

感谢你写这个方法下来,这几天我也在搞swig,在网上找不到多少中文的文档,即使找到了也没有实际的操作步骤。你这个文档是最详细的了。
还好我有一个同事懂这个,他帮我解决了swig最基本的入门应用。
关于你的问题一,我这边的方法和你类似,在放jsample.h,jsample.cpp,jsample.i的目录下新建一个批处理文件(jsample.bat),里面写"swig -c++ -python -o jsample_wrap.cpp jsample.i"(两个双冒号内的内容)。运行就能生成jsample.py和jsample_wrap.cpp。这种方法与你的命令行运行其实是一样的。
关于你的问题二,可以改VS2005的菜单Project->Properties->Configuration Properties->Linker->General页的第一项Output File.这一项原来是$(OutDir)\$(ProjectName).dll,可以改为$(OutDir)\_$(ProjectName).pyd。这样编译出来的就是_jsample.pyd。

以上是不是正统的方法?我也不知道。能用就行了吧。以后阅读官方的文档,就可以知道是不是正统的方法了。
写这些不知道你看不看得到,希望能给swig的新手一些帮助吧。从零开始学swig的过程真不好受。
oasistree 2009-03-06
  • 打赏
  • 举报
回复
没人对这感兴趣,就结贴了吧,以后有人有这方面问题或许可以帮助一下。
补充一下,我的第一个问题还能用Windows batch文件实现,不过我还是不知道正统的方法是什么 :-/
oasistree 2009-03-04
  • 打赏
  • 举报
回复
花了我好大功夫,终于跑起来了,看来这教程只有我自己出了,但是还有两个小问题请教中。
平台:window xp, Visual Studio 2005, Python
1. 首先在www.swig.org下载swig安装包,把文档也下载下来以备日后使用。解压安装包到任意路径,路径中最好不要带空格。
2. 制作源文件和swig接口文件,我的文件如下

/* jsample.h */
#ifndef JSAMPLE_H
#define JSAMPLE_H
//void cHelloWorld();
int compute(int a, int b);
#endif



/* jsample.cpp */
#include <iostream>
#include "jsample.h"
using namespace std;

int compute(int a, int b)
{
int temp = (a+b)*(a-b);
return temp;
}


/* File : jsample.i */
%module jsample

%inline %{
#include "jsample.h"
%}
int compute(int a,int b);

3. 使用swig生成部分文件
'swig -c++ -python jsample.i'
如果是C语言的话就是'swig -python jsample.i'
我请教的问题一
虽然我用很笨的办法做到了,我还是想弱弱的问一下'swig -c++ -python jsample.i'这条命令在windows下如何实现?
说一下我笨办法,把swig.exe所在的路径添加到系统环境变量path中,然后打开命令提示符用dos命令改变路径到当前源文件下,如cd E:\sth1\sth2\sth3 这时在使用swig -c++ -python jsample.i 完了后在当前目录下会生成两个文件jsample_wrap.cxx和jsample.py。
4. 配置Visual Studio 的文件路径,好像也可以配置成环境变量PYTHON_INCLUDE和PYTHON_LIB,也最好把文件拷到不到空格的路径下,不过我没有试。我说一下在VS中的配置方法:
tools>options>Projects and Solutions>VC++ Directories中,在show directories for 'Include files'中加入如'D:\Program Files\python26\include';在show dirctories for 'Library files'中加入如'D:\Program_runing_data\libs\VSlibs\Python\libs\python26.lib'。这是我从python的安转路径中拷到不带空格的路径中的,如果带空格的话,就得在工程中也加入python26.lib,
5. 使用Visual Studio (我的2005)编译文件
新建一个Win32 Console Application工程,在向导中点next,Application type选择DLL,在Additional options中选择Emppty project。向Header Files中加入jsample.h,向Source File中加入jsample.cpp和jsample_wrap.cxx,向工程中加入jsample.i,这是可能会弹出一个对话框,我选的是'否'。然后再VS中project>Properties中点Configuration Manager,设置Configration为Release,Platform为Win32。
最后Build Solution,在Release文件夹中会生成jsample.dll,把它改名成_jsample.pyd。把jsample.py,_jsample.pyd和测试文件放到同一个文件夹中测试。
我请教的问题二
如何设置VS自动生成_jsample.pyd文件?
我的测试文件:

#!/usr/bin/env python
# -*- coding: cp936 -*-
# runme.py
from __future__ import division

import jsample
print('this is the test running.\n')
aa = jsample.compute(5,2)
print(aa)
raw_input("press the enter key to exit.")


摸索了我好长时间,连打字也花了不少功夫,申请加精啊。
oasistree 2009-03-03
  • 打赏
  • 举报
回复
补充一个条件,visual studio使用的不熟

37,719

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧