Vì vậy, tôi đang sử dụng python để gọi các phương thức trong một thư viện C++ dùng chung. Tôi đang gặp một vấn đề chuyển đổi một mảng 2D numpy thành một mảng C++ 2D của quần short như là một đầu vào chức năng. Tôi đã tạo ra một ví dụ đồ chơi thể hiện vấn đề. Vui lòng biên dịch và dùng thử!Chuyển đổi một mảng numpy 2D thành C++ ngắn **?
Đây là mã python (soexample.py):
# Python imports
from ctypes import CDLL
import numpy as np
# Open shared CPP library:
cpplib=CDLL('./libsoexample.so')
cppobj = cpplib.CPPClass_py()
# Stuck on converting to short**?
array = np.array([[1,2,3],[1,2,3]])
cpplib.func_py(cppobj,array)
Đây là Thư viện C++ (soexample.cpp):
#include <iostream>
using namespace std;
class CPPClass
{
public:
CPPClass(){}
void func(unsigned short **array)
{
cout << array[0][0] << endl;
}
};
// For use with python:
extern "C" {
CPPClass* CPPClass_py(){ return new CPPClass(); }
void func_py(CPPClass* myClass, unsigned short **array)
{
myClass->func(array);
}
}
mà tôi biên soạn với lệnh sau đây:
g++ -fPIC -Wall -Wextra -shared -o libsoexample.so soexample.cpp
Khi tôi chạy tệp python, tôi nhận được lỗi sau:
>> python soexample.py
Traceback (most recent call last):
File "soexample.py", line 13, in <module>
cpplib.func_py(cppobj,array)
ctypes.ArgumentError: argument 2: <type 'exceptions.TypeError'>: Don't know how to convert parameter 2
Làm cách nào để sửa lỗi này không may TypeError
?
Tôi tin ints ngắn C là 16 bit. Mặt khác, int mặc định thường là 32 bit. Bạn có thể thử tạo mảng của mình dưới dạng 'array = np.array ([[1,2,3], [1,2,3]], dtype = np.uint16)' và xem điều gì xảy ra. – Jaime