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)的更多相关文章

  1. python 调用c++类方法(1)

    myTest.cpp: #include<iostream> #include<vector> class MyTest { public: MyTest(); ~MyTest ...

  2. python 静态方法、类方法(二)

    <Python静态方法.类方法>一文中曾用在类之外生成函数的方式,来计算类的实例的个数.本文将探讨用静态方法和类方法来实现此功能. 一使用静态方法统计实例 例1.static.py # - ...

  3. python类:类方法和静态方法

    http://blog.csdn.net/pipisorry/article/details/49516185 面相对象程序设计中,类方法和静态方法是经常用到的两个术语.逻辑上讲:类方法是只能由类名调 ...

  4. Python 实例方法、类方法、静态方法的区别与作用

    Python中至少有三种比较常见的方法类型,即实例方法,类方法.静态方法.它们是如何定义的呢?如何调用的呢?它们又有何区别和作用呢?且看下文. 首先,这三种方法都定义在类中.下面我先简单说一下怎么定义 ...

  5. python静态方法和类方法

    静态方法和类方法在python2.2中被引用,经典类和新式类都可以使用.同时,一对内建函数:staticmethod和classmethod被引入,用来转化类中某一方法为这两种方法之一. 静态方法: ...

  6. 【面试必问】python实例方法、类方法@classmethod、静态方法@staticmethod和属性方法@property区别

    [面试必问]python实例方法.类方法@classmethod.静态方法@staticmethod和属性方法@property区别 1.#类方法@classmethod,只能访问类变量,不能访问实例 ...

  7. Python 静态方法、类方法和属性方法

    Python 静态方法.类方法和属性方法 静态方法(staticmethod) staticmethod不与类或者对象绑定,类和实例对象都可以调用,没有自动传值效果,Python内置函数staticm ...

  8. 【初学python】使用python调用monkey测试

    目前公司主要开发安卓平台的APP,平时测试经常需要使用monkey测试,所以尝试了下用python调用monkey,代码如下: import os apk = {'j': 'com.***.test1 ...

  9. python调用py中rar的路径问题。

    1.python调用py,在py中的os.getcwd()获取的不是py的路径,可以通过os.path.split(os.path.realpath(__file__))[0]来获取py的路径. 2. ...

随机推荐

  1. ES中的查询操作

    1.前缀查询 先输入数据: PUT /my_index/address/ { "postcode": "W1 3DG" } PUT /my_index/addr ...

  2. android中的rn项目更新gradle及补充二

    修改build.gradle的版本,com.android.tools.build:gradle:2.1.0, 改为更高的,然后更改gradle/wrapper/gradle-wrapper.prop ...

  3. npm工作流 与webpack 分同环境配置

    npm:http://www.ruanyifeng.com/blog/2016/10/npm_scripts.html process.env.npm_lifecycle_event process. ...

  4. python之kafka消费

    使用python3第三方工具,实现kafka消费 # -*- coding: utf-8 -*- import uuid import json from kafka import KafkaCons ...

  5. MATLAB中的函数句柄及其应用

    1.函数句柄的创建 函数句柄(function handle)是MATLAB中的一类特殊的数据结构,它的地位类似于其它计算机语言里的函数对象(Javascript,Python),函数指针(C++), ...

  6. laravel-admin利用ModelTree实现对分类信息的管理

    根据laravel的基本操作步骤依次完成如下操作:主要是参考laravel-admin内置的Menu菜单管理的功能,利用ModelTree实现业务中的Tree数据管理. 1. 创建模型 php art ...

  7. DigitalOcean 推荐的ubuntu16下LAMP安装过程

    LAMP安装过程: How To Install Linux, Apache, MySQL, PHP (LAMP) stack on Ubuntu 16.04 (另一个参考例程:Ubuntu 16.0 ...

  8. hdu 3549 网络流最大流 Ford-Fulkerson

    Ford-Fulkerson方法依赖于三种重要思想,这三个思想就是:残留网络,增广路径和割. Ford-Fulkerson方法是一种迭代的方法.开始时,对所有的u,v∈V有f(u,v)=0,即初始状态 ...

  9. 生成不带版本的jar包 不影响deploy

    1 How to build maven project without version? 工程pom中增加 <project> ... <build> ... <fin ...

  10. java作业利用递归解决问题

    第一题 利用递归求组合数 设计思想 (1)首先根据公式求,利用递归完成阶乘函数的初始化,并且通过调用阶乘,实现公式计算 (2)递推方法,根据杨辉三角的特点,设置二维数组,从上到下依次保存杨辉三角所得数 ...