python调用c++类方法(2)
testpy.cpp:
#include<iostream>
#include<vector> struct point{
float pointx;
float pointy;
float pointz;
}; struct pose{
float x;
float y;
float z;
int* data; point location;
}; class MyTest
{
public:
MyTest();
~MyTest();
int myTest(int* myData, int dataNum, pose& mypose); private: }; MyTest::MyTest()
{
} MyTest::~MyTest()
{
} int MyTest::myTest(int* myData, int dataNum, pose& mypose)
{
if (dataNum>)
{
for (size_t i = ; i < dataNum; i++)
{
*myData = i + ;
myData += ;
}
}
mypose.x=1.0;
mypose.y=2.0;
mypose.z=3.0;
mypose.location.pointx=4.0;
mypose.location.pointy=5.0;
mypose.location.pointz=6.0; if (dataNum>)
{
for (size_t i = ; i < dataNum; i++)
{
*(mypose.data) = i + ;
mypose.data += ;
}
} return ;
} extern "C" { MyTest myObj; int myTest(int* myData, int dataNum, pose& mypose)
{
return myObj.myTest(myData, dataNum, mypose);
} }
pythonCallCpp.py:
#!/usr/bin/python
# -*- coding: utf-8 -*- from ctypes import *
import ctypes
import numpy INPUT = c_int * 100
myinput = INPUT() INPUT01 = c_int * 100
myinput01 = INPUT01() #arr = numpy.array([1, 2, 3, 4],dtype = numpy.int)
arr1 = numpy.zeros(100, dtype=ctypes.c_int) #if not arr.flags['C_CONTIGUOUS']: # 若不是C连续内存,强制转换
#arr = numpy.ascontiguous(arr, dtype = numpy.dtype)
if not arr1.flags['C_CONTIGUOUS']:
arr1 = numpy.ascontiguous(arr1, dtype = numpy.dtype)
#c_arr = numpy.ctypeslib.as_ctypes(arr) # array 转为ctypes类型
#c_arr1 = numpy.ctypeslib.as_ctypes(arr1) cptr = arr1.ctypes.data_as(POINTER(ctypes.c_int)) # 取指针 so = ctypes.cdll.LoadLibrary
lib = so("/opt/fp100/libtest.so")
print 'myTest(int* myData, int dataNum, pose& mypos)' class point(ctypes.Structure):
_fields_ = [("pointx", ctypes.c_float),("pointy", ctypes.c_float),("pointz", ctypes.c_float)] pointtemp = point(0.0, 0.0, 0.0) class pose(ctypes.Structure):
_fields_ = [("x", ctypes.c_float),("y", ctypes.c_float),("z", ctypes.c_float),("data", POINTER(ctypes.c_int)),("location", point)] #POINTER(ctypes.c_int) posetemp = pose()
posetemp.x=0.0
posetemp.y=0.0
posetemp.z=0.0 posetemp.data = myinput01
posetemp.location = pointtemp #posetemp = pose() lib.myTest(myinput, 100, ctypes.byref(posetemp)) print myinput[0]
print myinput[1]
print myinput[2]
print myinput[3]
print posetemp.x
print posetemp.y
print posetemp.z
print posetemp.location.pointx
print posetemp.location.pointy
print posetemp.location.pointz print posetemp.data[0]
结论:存在一个问题,结构体内套指针时,出现地址紊乱,不知如何解决?
python调用c++类方法(2)的更多相关文章
- python 调用c++类方法(1)
myTest.cpp: #include<iostream> #include<vector> class MyTest { public: MyTest(); ~MyTest ...
- python 静态方法、类方法(二)
<Python静态方法.类方法>一文中曾用在类之外生成函数的方式,来计算类的实例的个数.本文将探讨用静态方法和类方法来实现此功能. 一使用静态方法统计实例 例1.static.py # - ...
- python类:类方法和静态方法
http://blog.csdn.net/pipisorry/article/details/49516185 面相对象程序设计中,类方法和静态方法是经常用到的两个术语.逻辑上讲:类方法是只能由类名调 ...
- Python 实例方法、类方法、静态方法的区别与作用
Python中至少有三种比较常见的方法类型,即实例方法,类方法.静态方法.它们是如何定义的呢?如何调用的呢?它们又有何区别和作用呢?且看下文. 首先,这三种方法都定义在类中.下面我先简单说一下怎么定义 ...
- python静态方法和类方法
静态方法和类方法在python2.2中被引用,经典类和新式类都可以使用.同时,一对内建函数:staticmethod和classmethod被引入,用来转化类中某一方法为这两种方法之一. 静态方法: ...
- 【面试必问】python实例方法、类方法@classmethod、静态方法@staticmethod和属性方法@property区别
[面试必问]python实例方法.类方法@classmethod.静态方法@staticmethod和属性方法@property区别 1.#类方法@classmethod,只能访问类变量,不能访问实例 ...
- Python 静态方法、类方法和属性方法
Python 静态方法.类方法和属性方法 静态方法(staticmethod) staticmethod不与类或者对象绑定,类和实例对象都可以调用,没有自动传值效果,Python内置函数staticm ...
- 【初学python】使用python调用monkey测试
目前公司主要开发安卓平台的APP,平时测试经常需要使用monkey测试,所以尝试了下用python调用monkey,代码如下: import os apk = {'j': 'com.***.test1 ...
- python调用py中rar的路径问题。
1.python调用py,在py中的os.getcwd()获取的不是py的路径,可以通过os.path.split(os.path.realpath(__file__))[0]来获取py的路径. 2. ...
随机推荐
- npm学习(六)之如何创建 Node.js 模块
如何创建 Node.js 模块 Node.js 模块是一种可以发布到 npm 的包.当你创建一个新模块时,创建 package.json 文件是第一步. 你可以使用 npm init 命令创建 pac ...
- 安装linux mint后要做20件事
Linux Mint 17 Qiana Cinnamon Linux Mint 17已经发布,定名为Qiana.Mint是Linux最佳发行版之一,它定位于桌面用户,关注可用性和简洁.它携带了风格迥异 ...
- Vue常用修饰符
Vue提供了事件修饰符用于DOM的事件处理,常用的事件修饰符有以下几个: (1). stop:阻止冒泡(通俗讲就是阻止事件向上级DOM元素传递) 点击内层div的结果: 点击外层div的结果: 修改代 ...
- css3之新增伪类
css3新增了许多伪类,但是IE8以及更低版本的IE浏览器不支持css3伪类,所以在使用时要是涉及到布局等意象全局的样式,应该多考虑一下. 1.elem:nth-child(n) 这个伪类选中父元素下 ...
- git 本地tag和远程tag对应不上 vscode里pull不下代码
vscode拉取代码是用 git pull --tags origin saas-xxx > git pull --tags origin saas-base From 172.16.0.xx ...
- easyui,获取tabs标签页内容,以及刷新datagrid
因为先点开tab页xxx查看表格,再点另一个tab页xxxx修改部分信息,再切换到tab页xxx,tab页xxx里的datagrid表格不会刷新,显示不了修改的信息(在此tab页按F5刷新可以解决,但 ...
- xml的解析及案例的分析和分享
HTML的文档如下: <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset=& ...
- ifconfig命令返回找不到“-bash: ifconfig: command not found”
“-bash: ifconfig: command not found“因为系统没有安装net-tools yum -y install net-tools
- (转) weblogic 12c忘记密码
weblogic安装后,很久不用,忘记访问控制台的用户名或者密码,可通过以下步骤来重置用户名密码. 说明:%DOMAIN_HOME%:指WebLogic Server 域(Domain)目录 我的是: ...
- Python条件控制与循环
条件控制语句:if 循环语句:while.for 其他语句:continue.break.pass 1.if语句 # ================================ a = 1 if ...