In
(Un.)pythonAppelezc++Code《DeC++Bibliothèque de liens partagés compilée àpythonGuide d'invocation》
(2.)ndarray(Python)AvecMat(C++)Transmission des données
Dans deux articles, Nous avons expliqué python Comment appeler avec des dépendances complexes C++Code,EtndarrayEtMat Type passé entre deux langues (Cible principalepythonMoyenneopencvImages etc++MoyenneopencvTransfert de données d'image).
Cet article tient compte de C++ Les structures sont également des données courantes , C'est pour ça que j'ai écrit .
// Définir la structure
typedef struct NLDJ_TC_Out
{
int test0;
float test1;
int test2[4];
}NLDJ_TC_Out;
extern "C"{
// Définir une fonction qui renvoie la structure
NLDJ_TC_Out get_struct(){
// Structure
NLDJ_TC_Out result;
result.test0=1;
result.test1=2.2;
for (int i=0;i<4;i++){
result.test2[i]=i;
}
return result; // Retour à la structure
}
}
Le code ci - dessus parce qu'il n'y a pas de dépendance ,Donc vous pouvez l'utiliser directementg++ -o StructCls.so -shared -fPIC StructCls.cpp
Compiler dans une bibliothèque de liens partagés
python Le Code complète principalement la fonction d'appel , Recevoir la structure retournée ,Principales étapes:
import ctypes
from ctypes import *
# Charger la Bibliothèque de liens partagés
structcls = ctypes.cdll.LoadLibrary("build/StructCls.so")
# python Définir une structure comme une classe
class Struct_NLDJ_TC_Out(Structure):
_fields_ = [("test0", c_int), ("test1", c_float), ("test2", c_int * 4)]
# Définir le type de données pour le type de retour
structcls.get_struct.restype = Struct_NLDJ_TC_Out
# result A été transformé en pythonDéfini dansStruct_NLDJ_TC_OutC'est
# Alors...resultOui, vous pouvez appuyer surpythonSortie syntaxique
result = structcls.get_struct()
print(result.test2[1])
Graphique des résultats:
RÉFÉRENCES:PythonAppelezc++Dynamique dedll Cartographie des données (Mat Transfert de type et transfert de structure )