主頁 > 知識(shí)庫 > 膠水語言Python與C/C++的相互調(diào)用的實(shí)現(xiàn)

膠水語言Python與C/C++的相互調(diào)用的實(shí)現(xiàn)

熱門標(biāo)簽:荊州云電銷機(jī)器人供應(yīng)商 江蘇房產(chǎn)電銷機(jī)器人廠家 外呼不封號(hào)系統(tǒng) 幫人做地圖標(biāo)注收費(fèi)算詐騙嗎 遼寧400電話辦理多少錢 悟空智電銷機(jī)器人6 溫州旅游地圖標(biāo)注 蘇州電銷機(jī)器人十大排行榜 電信營業(yè)廳400電話申請(qǐng)

準(zhǔn)備工作:

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調(diào)用C

步驟1:Csayhello.c

#includestdio.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 *
 
#加載動(dòng)態(tài)庫
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位,沒有就裝一個(gè)。

運(yùn)行結(jié)果:

二、Python調(diào)用C++

步驟1:新建項(xiàng)目dll_demo.dev

步驟2:dllmain.cpp

#define DLLEXPORT extern "C" __declspec(dllexport)
 
DLLEXPORT int  multiply(int a, int b) {
    return a * b;
}
 
//兩數(shù)相加
DLLEXPORT int  add(int a, int b) {
    return a + b;
}
//兩數(shù)相減
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位,沒有就裝一個(gè)。

運(yùn)行結(jié)果:

三、C++調(diào)用Python函數(shù)

步驟1:Caculate.py

def add(a,b):
    return a+b

步驟2:新建項(xiàng)目test.dev,然后設(shè)置一下“項(xiàng)目屬性”的鏈接庫、庫目錄、包含文件目錄等3個(gè)部分。

步驟3:test.cpp

#include python.h>
#includeiostream>
 
using namespace std;
 
int main()
{
    Py_Initialize();//使用python之前,要調(diào)用Py_Initialize();這個(gè)函數(shù)進(jìn)行初始化
    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");//這里是要調(diào)用的文件名Caculate.py
    if (pModule==NULL)
    {
        cout  "沒找到"  endl;
    }
    pFunc = PyObject_GetAttrString(pModule, "add");//這里是要調(diào)用的函數(shù)名
    PyObject* args = Py_BuildValue("(ii)", 100, 120);//給python函數(shù)參數(shù)賦值
 
    PyObject* pRet = PyObject_CallObject(pFunc, args);//調(diào)用函數(shù)
 
    int res = 0;
    PyArg_Parse(pRet,"i",res);//轉(zhuǎn)換返回類型
 
    cout  "res:"  res  endl;//輸出結(jié)果
 
    Py_Finalize();//調(diào)用Py_Finalize,這個(gè)根Py_Initialize相對(duì)應(yīng)的。
 
    return 0;
}

步驟4:編譯并運(yùn)行

運(yùn)行結(jié)果:

到此這篇關(guān)于膠水語言Python與C/C++的相互調(diào)用的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Python與C/C++相互調(diào)用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • Python 調(diào)用C++封裝的進(jìn)一步探索交流
  • Python與C/C++的相互調(diào)用案例
  • 一文助你搞懂參數(shù)傳遞原理解析(java、go、python、c++)
  • 詳解如何在VS2019和VScode中配置C++調(diào)用python接口
  • C++和python實(shí)現(xiàn)阿姆斯特朗數(shù)字查找實(shí)例代碼
  • python和C++共享內(nèi)存?zhèn)鬏攬D像的示例
  • Python擴(kuò)展C/C++庫的方法(C轉(zhuǎn)換為Python)
  • 解決c++調(diào)用python中文亂碼問題
  • Python3安裝模塊報(bào)錯(cuò)Microsoft Visual C++ 14.0 is required的解決方法
  • C、C++、Java到Python,編程入門學(xué)習(xí)什么語言比較好
  • 如何在C++中調(diào)用Python

標(biāo)簽:黃山 宿遷 喀什 臺(tái)灣 景德鎮(zhèn) 濟(jì)南 三沙 欽州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《膠水語言Python與C/C++的相互調(diào)用的實(shí)現(xiàn)》,本文關(guān)鍵詞  膠水,語言,Python,與,C++,的,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《膠水語言Python與C/C++的相互調(diào)用的實(shí)現(xiàn)》相關(guān)的同類信息!
  • 本頁收集關(guān)于膠水語言Python與C/C++的相互調(diào)用的實(shí)現(xiàn)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章