操作系统:Ubuntu 12.04 STL
python版本:2.7.5
首先,我们写一个C++的lib,稍微介绍一下传参:
传参其实在python中很简单的,首先我们来试试最间的传参,传整数,以下为C++代码:
[code lang=”cpp”]
#include <stdlib.h>
#include <iostream>
#include <string>
#include <string.h>
using namespace std;
int Add(int a,int b)
{
return a+b;
}
extern "C"
{
int add(int a,int b)
{
return Add(a,b);
}
}
[/code]
然后运行如下命令:
[code]
g++ -c -fPIC libx.cpp -o libx.o
g++ -shared -W1,-soname,libx.so -o libx.so libx.o
[/code]
此时会生成一个libx.so的文件,我们把这个文件考入python文件同一级路径下,python代码如下:
[code lang=”python”]
#coding=utf-8
__author__ = ‘karldoenitz’
from ctypes import cdll, c_char_p
lib_cpp = cdll.LoadLibrary(‘./libx.so’)
print lib_cpp.add(3, 9)
[/code]
此时我们运行python文件,会出现如下结果:12
好了,整数传参我们解决了,然后看一个复杂一点的,传递一个string,python向C++传递一个string要比C#向C++传递一个string要方便多了!代码如下:
[code lang=”cpp”]
#include <stdlib.h>
#include <iostream>
#include <string>
#include <string.h>
using namespace std;
int getNum(char *s)
{
string language(s);
string a="HelloWorld!";
if(language==a)
{
return 1;
}
return 0;
}
int Add(int a,int b)
{
return a+b;
}
extern "C"
{
int get_Num(char *s)
{
return getNum(s);
}
int add(int a,int b)
{
return Add(a,b);
}
}
[/code]
然后依然运行刚才的那两行代码,将其编译为libx.so然后写python代码:
[code lang=”python”]
#coding=utf-8
__author__ = ‘karldoenitz’
from ctypes import cdll, c_char_p
lib_cpp = cdll.LoadLibrary(‘./libx.so’)
string_language = c_char_p("HelloWorld!")
print lib_cpp.get_Num(string_language)
[/code]
运行python代码,有如下结果:1
接下来,我们看看python如何向C++传递一个string,同时收到一个string,C++的代码如下:
[code lang=”cpp”]
#include <stdlib.h>
#include <iostream>
#include <string>
#include <string.h>
using namespace std;
int getNum(char *s)
{
string language(s);
string a="HelloWorld!";
if(language==a)
{
return 1;
}
return 0;
}
int Add(int a,int b)
{
return a+b;
}
char* modifyString(char* recieveString)
{
const char *addString = "OK,Sir!";
strcat(recieveString,addString);
return recieveString;
}
extern "C"
{
int get_Num(char *s)
{
return getNum(s);
}
char* modify_String(char* recieveString)
{
return modifyString(recieveString);
}
int add(int a,int b)
{
return Add(a,b);
}
}
[/code]
然后写一个python代码:
[code lang=”python”]
#coding=utf-8
__author__ = ‘karldoenitz’
from ctypes import cdll, c_char_p
lib_cpp = cdll.LoadLibrary(‘./libx.so’)
string_language = c_char_p("HelloWorld!")
print lib_cpp.get_Num(string_language)
print lib_cpp.add(3, 9)
while True:
string_from_console = raw_input("输入字符串:").strip()
if string_from_console == "exit":
break
receive_string = lib_cpp.modify_String(string_from_console)
print c_char_p(receive_string).value
[/code]
好了,此时我们输入一个字符串,就会输出一个增加了OK,Sir!的新字符串,很简单的。