程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

C + + structure et transmission Python

編輯:Python

  • 1、Préface
  • 2、C++Code
  • 3、pythonCode
  • End

Articles de la série:
(Un.)pythonAppelezc++Code《DeC++Bibliothèque de liens partagés compilée àpythonGuide d'invocation》
(2.)ndarray(Python)AvecMat(C++)Transmission des données
(Trois)C++Structure etpythonTransmission de

1、Préface

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 .

2、C++Code

// 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

3、pythonCode

python Le Code complète principalement la fonction d'appel , Recevoir la structure retournée ,Principales étapes:

  1. Définir la classe de structure ( Équivalent à la cartographie C++Structure en)
  2. Définir le type de données pour le type de retour
  3. Appelez
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:

End

RÉFÉRENCES:PythonAppelezc++Dynamique dedll Cartographie des données (Mat Transfert de type et transfert de structure )


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved