So verwende ich Python, um Methoden in einer freigegebenen C++ - Bibliothek aufzurufen. Ich habe ein Problem, indem ich ein numpliges 2D-Array in ein C++ - 2D-Array von Kurzschlüssen als Funktionseingabe umwandelt. Ich habe ein Spielzeugbeispiel erstellt, das das Problem aufweist. Fühlen Sie sich frei, es zu kompilieren und auszuprobieren! HierWandeln Sie ein 2D-Nummernfeld in C++ um.
ist der Python-Code (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)
Hier ist die C++ Bibliothek (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);
}
}
die ich mit dem folgenden Befehl kompilieren:
Wenn ich die Python-Datei ausführen, erhalte ich den folgenden Fehler:
>> 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
Wie korrigiere ich diesen unglücklichen TypeError
richtig?
glaube ich, C Kurz Ints 16 Bits sind. Der Standardwert numpy int ist typischerweise 32 Bit. Sie können versuchen, Ihr Array als 'array = np.array ([[1,2,3], [1,2,3]], dtype = np.uint16)' zu erstellen und zu sehen, was passiert. – Jaime