糊言語python c / c + +との相互発進

準備:

python:

Dev-C++:

gcc和g++:

notepad++:

 

一、python発進c

ステップ1:csayhello . c

  1. #include<stdio.h>
  2. void show_hello()
  3. {
  4.     printf("------------来自C语言的问候-----------\n");
  5.     printf("-----Peter Zhao says:Hello C world!-----\n\n");
  6. }

ステップ2:

命令は、gcc csayhello . c−fpic shared - o lib_csayhello。

 

ステップ3:psayhello . py

  1. from ctypes import *
  2. #加载动态库
  3. lib = cdll.LoadLibrary(r"./lib_Csayhello.so")
  4. lib.show_hello()
  5. print("-----------来自Python语言的问候--------------")
  6. print("---Peter Zhao says:Hello Python world,too!---")

ステップ4:

命令はpython psayhello . py

注意:pythonは32位、はを一つ入れなかった。

運行の結果は、

 

2、python発進c + +

ステップ1:プロジェクトの新築dll_demo . dev

ステップ2:dllmain . cpp

  1. #define DLLEXPORT extern "C" __declspec(dllexport)
  2. DLLEXPORT int multiply(int a, int b) {
  3. return a * b;
  4. }
  5. //两数相加
  6. DLLEXPORT int add(int a, int b) {
  7. return a + b;
  8. }
  9. //两数相减
  10. DLLEXPORT int sub(int a, int b) {
  11. return a-b;
  12. }

ステップ3:dll . h

  1. int multiply(int, int);
  2. class Mymath {
  3. int sum(int, int);
  4. int sub(int, int);
  5. };

ステップ4:コンパイル生成dll_demo . dll

ステップ5:pdll_demo . py

  1. import ctypes
  2. #lib = ctypes.cdll.LoadLibrary(r"./dll_demo.dll")
  3. lib = ctypes.WinDLL(r"./dll_demo.dll")
  4. #print(lib)
  5. print(lib.multiply(80,95))
  6. print(lib.add(80,95))
  7. print(lib.sub(80,95))

ステップ6:

命令はpython pdll_demo . py

注意:pythonは32位、はを一つ入れなかった。

運行の結果は、

 

3、c + +発進python関数

ステップ1:caculate . py

  1. def add(a,b):
  2. return a+b

ステップ2:プロジェクトの新築test . dev、そしてちょっと」「事業の属性のリンク設置庫、サハリンのリスト、一部含まれ文書目録など3つの。

ステップ3:test . cpp

  1. #include <python.h>
  2. #include<iostream>
  3. using namespace std;
  4. int main()
  5. {
  6. Py_Initialize();//使用python之前,要调用Py_Initialize();这个函数进行初始化
  7. if (!Py_IsInitialized())
  8. {
  9. printf("初始化失败!");
  10. return 0;
  11. }
  12. PyRun_SimpleString("import sys");
  13. PyRun_SimpleString("sys.path.append('./')");//这一步很重要,修改Python路径
  14. PyObject * pModule = NULL;//声明变量
  15. PyObject * pFunc = NULL;// 声明变量
  16. pModule = PyImport_ImportModule("Caculate");//这里是要调用的文件名Caculate.py
  17. if (pModule==NULL)
  18. {
  19. cout << "没找到" << endl;
  20. }
  21. pFunc = PyObject_GetAttrString(pModule, "add");//这里是要调用的函数名
  22. PyObject* args = Py_BuildValue("(ii)", 100, 120);//给python函数参数赋值
  23. PyObject* pRet = PyObject_CallObject(pFunc, args);//调用函数
  24. int res = 0;
  25. PyArg_Parse(pRet,"i",&res);//转换返回类型
  26. cout << "res:" << res << endl;//输出结果
  27. Py_Finalize();//调用Py_Finalize,这个根Py_Initialize相对应的。
  28. return 0;
  29. }

ステップ4:コンパイルし運行

運行の結果は、

 

 

ソースネットワーク 戻る