准备工作:
python:https://www.python.org/downloads/
Dev-C++:https://sourceforge.net/projects/orwelldevcpp/
gcc和g++:http://mingw-w64.org/doku.php
notepad++:https://notepad-plus.en.softonic.com/
一、Python调用C
步骤1:Csayhello.c
-
#include<stdio.h>
-
-
void show_hello()
-
{
-
printf(
"------------来自C语言的问候-----------\n");
-
printf(
"-----Peter Zhao says:Hello C world!-----\n\n");
-
}
步骤2:
命令:gcc Csayhello.c -fPIC -shared -o lib_Csayhello.so
步骤3:Psayhello.py
-
from ctypes
import *
-
-
#加载动态库
-
lib = cdll.LoadLibrary(
r"./lib_Csayhello.so")
-
lib.show_hello()
-
-
print(
"-----------来自Python语言的问候--------------")
-
print(
"---Peter Zhao says:Hello Python world,too!---")
步骤4:
命令:python Psayhello.py
注意:python为32位,没有就装一个。
运行结果:
二、Python调用C++
步骤1:新建项目dll_demo.dev
步骤2:dllmain.cpp
-
#define DLLEXPORT extern "C" __declspec(dllexport)
-
-
DLLEXPORT int multiply(int a, int b) {
-
return a * b;
-
}
-
-
//两数相加
-
DLLEXPORT int add(int a, int b) {
-
return a + b;
-
}
-
//两数相减
-
DLLEXPORT int sub(int a, int b) {
-
return a-b;
-
}
步骤3:dll.h
-
int multiply(int, int);
-
-
class Mymath {
-
int sum(int, int);
-
int sub(int, int);
-
};
步骤4:编译生成dll_demo.dll
步骤5:Pdll_demo.py
-
import ctypes
-
#lib = ctypes.cdll.LoadLibrary(r"./dll_demo.dll")
-
lib = ctypes.WinDLL(
r"./dll_demo.dll")
-
#print(lib)
-
print(lib.multiply(
80,
95))
-
print(lib.add(
80,
95))
-
print(lib.sub(
80,
95))
步骤6:
命令:python Pdll_demo.py
注意:python为32位,没有就装一个。
运行结果:
三、C++调用Python函数
步骤1:Caculate.py
-
def add(a,b):
-
return a+b
步骤2:新建项目test.dev,然后设置一下“项目属性”的链接库、库目录、包含文件目录等3个部分。
步骤3:test.cpp
-
#include <python.h>
-
#include<iostream>
-
-
using
namespace
std;
-
-
int main()
-
{
-
Py_Initialize();
//使用python之前,要调用Py_Initialize();这个函数进行初始化
-
if (!Py_IsInitialized())
-
{
-
printf(
"初始化失败!");
-
return
0;
-
}
-
PyRun_SimpleString(
"import sys");
-
PyRun_SimpleString(
"sys.path.append('./')");
//这一步很重要,修改Python路径
-
-
-
PyObject * pModule =
NULL;
//声明变量
-
PyObject * pFunc =
NULL;
// 声明变量
-
pModule = PyImport_ImportModule(
"Caculate");
//这里是要调用的文件名Caculate.py
-
if (pModule==
NULL)
-
{
-
cout <<
"没找到" <<
endl;
-
}
-
pFunc = PyObject_GetAttrString(pModule,
"add");
//这里是要调用的函数名
-
PyObject* args = Py_BuildValue(
"(ii)",
100,
120);
//给python函数参数赋值
-
-
PyObject* pRet = PyObject_CallObject(pFunc, args);
//调用函数
-
-
int res =
0;
-
PyArg_Parse(pRet,
"i",&res);
//转换返回类型
-
-
cout <<
"res:" << res <<
endl;
//输出结果
-
-
Py_Finalize();
//调用Py_Finalize,这个根Py_Initialize相对应的。
-
-
return
0;
-
}
步骤4:编译并运行
运行结果:
转载:https://blog.csdn.net/xiaozhao_19/article/details/116404112
查看评论