欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python嵌入C/C++進(jìn)行開發(fā)詳解

 更新時(shí)間:2020年06月09日 14:47:12   作者:silencement  
在本篇文章里小編給大家分享了關(guān)于Python嵌入C/C++進(jìn)行開發(fā)的相關(guān)知識(shí)點(diǎn)內(nèi)容,有興趣的朋友們可以參考下。

如果你想把Python嵌入C/C++中是比較簡單的事情,你需要的是在VC中添加Python的include文件目錄和lib文件目錄。下面我們來看下如何把Python嵌入C/C++中。

VC6.0下,打開 tools->options->directories->show directories for,將Python安裝目錄下的inlude目錄添加到inlude files項(xiàng)中,將libs目錄添加到library files項(xiàng)中。

VC2005下,打開tools->options->項(xiàng)目和解決方案->VC++目錄,然后做相同工作。

代碼如下:

在debug下執(zhí)行出錯(cuò),“無法找到python31_d.lib文件”,后查到原因是:在debug下生成必須要有python31_d.lib文件,否則只能在release下生成

#include <python.h> 
int main() 
{ 
Py_Initialize(); 
PyRun_SimpleString("Print 'hi, python!'"); 
Py_Finalize(); 
return 0; 
}

Py_Initialize函數(shù)原型是:void Py_Initialize()

把Python嵌入C/C++中時(shí)必須使用該函數(shù),它初始化Python解釋器,在使用其他的Python/C API之前必須先調(diào)用該函數(shù)??梢允褂肞y_IsInitialized函數(shù)判斷是否初始化成功,成功返回True。

PyRun_SimpleString函數(shù)原型是int PyRun_SimpleString(const char *command),用來執(zhí)行一段Python代碼。

注意:是否需要維持語句間的縮進(jìn)呢?

Py_Finalize函數(shù)原型是void Py_Finalize(),用于關(guān)閉Python解釋器,釋放解釋器所占用的資源。

PyRun_SimpleFile函數(shù)可以用來運(yùn)行".py"腳本文件,函數(shù)原型如下:

int PyRun_SimpleFile(FILE *fp, const char *filename);

其 中fp是打開的文件指針,filename是要運(yùn)行的python腳本文件名。但是由于該函數(shù)官方發(fā)布的是由visual studio 2003.NET編譯的,如果使用其他版本的編譯器,F(xiàn)ILE定義可能由于版本原因?qū)е卤罎?。同時(shí),為簡便起見可以使用如下方式來代替該函數(shù):

PyRun_SimpleString("execfile(‘file.py')"); //使用execfile來運(yùn)行python文件

Py_BuildValue()用于對(duì)數(shù)字和字符串進(jìn)行轉(zhuǎn)換處理,變成Python中相應(yīng)的數(shù)據(jù)類型(在C語言中,所有Python類型都被聲明為PyObject類型),函數(shù)原型如下:

PyObject *Py_BuildValue(const char *format, …..);

PyString_String()用于將PyObject*類型的變量轉(zhuǎn)換成C語言可以處理的char*型,具體原型如下:

char* PyString_String(PyObject *p)。

知識(shí)點(diǎn)擴(kuò)展:

Python調(diào)用C/C++ DLL動(dòng)態(tài)鏈接庫的方法

首先,在創(chuàng)建一個(gè)DLL工程(本例創(chuàng)建環(huán)境為VS 2005),頭文件:

//hello.h
#ifdef EXPORT_HELLO_DLL
#define HELLO_API __declspec(dllexport)
#else
#define HELLO_API __declspec(dllimport)
#endif
extern "C"
{
 HELLO_API int IntAdd(int , int);
}

CPP文件:

//hello.cpp
#define EXPORT_HELLO_DLL
#include "hello.h"
HELLO_API int IntAdd(int a, int b)
{
 return a + b;
}

這里有兩個(gè)注意點(diǎn):

(1)弄清楚編譯的時(shí)候函數(shù)的調(diào)用約定采用的__cdecl還是__stdcall,因?yàn)楦鶕?jù)DLL中函數(shù)調(diào)用約定方式,Python將使用相應(yīng)的函數(shù)加載DLL。

(2)如果采用C++的工程,那么導(dǎo)出的接口需要extern "C",這樣python中才能識(shí)別導(dǎo)出的函數(shù)。

到此這篇關(guān)于Python嵌入C/C++進(jìn)行開發(fā)詳解的文章就介紹到這了,更多相關(guān)Python如何嵌入C/C++進(jìn)行開發(fā)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python一行代碼合并了162個(gè)Word文件

    python一行代碼合并了162個(gè)Word文件

    這篇文章主要為大家介紹了python一行代碼合并了162個(gè)Word文件示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • python3下使用cv2.imwrite存儲(chǔ)帶有中文路徑圖片的方法

    python3下使用cv2.imwrite存儲(chǔ)帶有中文路徑圖片的方法

    今天小編就為大家分享一篇python3下使用cv2.imwrite存儲(chǔ)帶有中文路徑圖片的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • 深入詳解Python中dotted庫的使用

    深入詳解Python中dotted庫的使用

    Python的dotted庫提供了一種便捷的方式來處理嵌套字典和列表,允許通過點(diǎn)分隔的路徑字符串來訪問和設(shè)置嵌套結(jié)構(gòu)中的數(shù)據(jù),下面我們就來看看它的具體使用
    2019-04-04
  • python棧實(shí)現(xiàn)進(jìn)制轉(zhuǎn)換的示例詳解

    python棧實(shí)現(xiàn)進(jìn)制轉(zhuǎn)換的示例詳解

    棧(Stack)是計(jì)算機(jī)科學(xué)中常用的數(shù)據(jù)結(jié)構(gòu),具有眾多實(shí)際應(yīng)用,其中之一是使用棧來實(shí)現(xiàn)進(jìn)制轉(zhuǎn)換,將一個(gè)數(shù)字從一種進(jìn)制表示轉(zhuǎn)換為另一種進(jìn)制表示,本文將深入研究棧的原理,以及如何使用Python實(shí)現(xiàn)十進(jìn)制到二進(jìn)制、八進(jìn)制和十六進(jìn)制的進(jìn)制轉(zhuǎn)換,需要的朋友可以參考下
    2023-11-11
  • Python?設(shè)計(jì)模式創(chuàng)建型單例模式

    Python?設(shè)計(jì)模式創(chuàng)建型單例模式

    這篇文章主要介紹了Python?設(shè)計(jì)模式創(chuàng)建型單例模式,即Singleton,單例是一種設(shè)計(jì)模式,應(yīng)用該模式的類只會(huì)生成一個(gè)實(shí)例,下文詳細(xì)介紹需要的小伙伴可以參考一下
    2022-02-02
  • 解決Python字典查找報(bào)Keyerror的問題

    解決Python字典查找報(bào)Keyerror的問題

    這篇文章主要介紹了解決Python字典查找報(bào)Keyerror的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • Python多線程批量采集圖片的代碼實(shí)現(xiàn)

    Python多線程批量采集圖片的代碼實(shí)現(xiàn)

    這篇文章主要給大家介紹了Python多線程批量采集圖片的代碼實(shí)現(xiàn),文中通過代碼示例講解的非常詳細(xì),具有一定的參考價(jià)值,需要的朋友可以參考下
    2024-05-05
  • Python實(shí)現(xiàn)智慧校園自動(dòng)評(píng)教全新版

    Python實(shí)現(xiàn)智慧校園自動(dòng)評(píng)教全新版

    上一次的智慧校園自動(dòng)評(píng)教是用的selenium庫去模擬人去對(duì)瀏覽器進(jìn)行點(diǎn)擊操作,雖然比手動(dòng)評(píng)教要快,但是效率還是不高.從而想去嘗試重新寫一份不用selenium的評(píng)教方案,功夫不負(fù)有心人,最終成功了,需要的朋友可以參考下
    2021-06-06
  • 利用Python+PyQt5實(shí)現(xiàn)簡易瀏覽器的實(shí)戰(zhàn)記錄

    利用Python+PyQt5實(shí)現(xiàn)簡易瀏覽器的實(shí)戰(zhàn)記錄

    這篇文章主要給大家介紹了關(guān)于如何利用Python+PyQt5實(shí)現(xiàn)簡易瀏覽器的相關(guān)資料,Qt 的主要優(yōu)勢(shì)是可以開發(fā)跨平臺(tái)的圖形界面程序,基于 Qt 的應(yīng)用能夠借助于各平臺(tái)的原生性在不同類的設(shè)備上運(yùn)行,而無須修改任何代碼庫,需要的朋友可以參考下
    2021-07-07
  • 淺談pyhton學(xué)習(xí)中出現(xiàn)的各種問題(新手必看)

    淺談pyhton學(xué)習(xí)中出現(xiàn)的各種問題(新手必看)

    下面小編就為大家?guī)硪黄獪\談pyhton學(xué)習(xí)中出現(xiàn)的各種問題(新手必看)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-05-05

最新評(píng)論