最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python調(diào)用C++動(dòng)態(tài)庫(kù)詳細(xì)步驟(附源碼)

 更新時(shí)間:2025年05月19日 10:27:32   作者:鬼魅-9527  
在某些項(xiàng)目中需要在python工程中調(diào)用自定義的C++的動(dòng)態(tài)庫(kù),分為以下兩步,第一步:動(dòng)態(tài)庫(kù)生成;第二步:Python調(diào)用動(dòng)態(tài)庫(kù),文章通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下

一:直接調(diào)用C++庫(kù)

第一步:動(dòng)態(tài)庫(kù)封裝(vs2017+qt5.12.10)

1、新建工程時(shí),一定要選擇qt下的Qt Class Library 這個(gè)選項(xiàng),如下圖所示

2、工程創(chuàng)建成功后,可以在解決方案下看到有testLib.h、testLib.cpp和testlib_global.h三個(gè)基礎(chǔ)的文件生成,如下圖所示

3、下面我們簡(jiǎn)單寫(xiě)一個(gè)打印“vs2017+qt5.12.10生成動(dòng)態(tài)庫(kù)”的輸出函數(shù)

testlib_global.h

#pragma once
 
#include <QtCore/qglobal.h>
#include <qDebug>
 
 
 
#ifndef BUILD_STATIC
# if defined(TESTLIB_LIB)
#  define TESTLIB_EXPORT Q_DECL_EXPORT
# else
#  define TESTLIB_EXPORT Q_DECL_IMPORT
# endif
#else
# define TESTLIB_EXPORT
#endif

testLib.h

#pragma once
 
#include "testlib_global.h"
 
class TESTLIB_EXPORT testLib
{
public:
    testLib();
 
	/**************************************************
	* @author 鬼魅-9527
	* @brief : 說(shuō)明
	* @param-in: 無(wú)
	* @param-out : 無(wú)
	* @return : 無(wú)
	* @date : 2025-01-01
	**************************************************/
	bool PrintfString();
};
/*將接口轉(zhuǎn)義供外部調(diào)用*/
extern "C"
{
	testLib obj;
	extern "C" _declspec(dllexport) bool __cdecl PrintfString()
	{
		return obj.PrintfString();
	}
}

testLib.cpp

#include "testLib.h"
 
testLib::testLib()
{
}
 
bool testLib::PrintfString()
{
	/*使用QStringLiteral,否則中文輸出會(huì)亂碼*/
	qDebug() << QStringLiteral("vs2017+qt5.12.10生成動(dòng)態(tài)庫(kù)");
 
	return true;
}

4、下面我們可以編譯生成動(dòng)態(tài)庫(kù)

第二步:Python調(diào)用C++動(dòng)態(tài)庫(kù)

1、打開(kāi)vs code 并在動(dòng)態(tài)庫(kù)目錄下新建一個(gè)test.py文件

test.py

#導(dǎo)入Python調(diào)用c++的ctypes庫(kù)
import ctypes
 
# 加載dll
my_dll = ctypes.CDLL("Z:/Demo/testLib/x64/Release/testLib.dll")
 
# 調(diào)用dll中的函數(shù)
my_dll.PrintfString()

2、通過(guò)終端執(zhí)行Python test.py,如下所示

3、從輸出結(jié)果可以看到提示加載庫(kù)錯(cuò)誤,這里出現(xiàn)錯(cuò)誤的原因是,test.dll依賴(lài)的其他的庫(kù)并沒(méi)有找到,因此需要使用在test.dll目錄下使用windeployqt打包test.dll依賴(lài)的庫(kù),如下圖所示

3、再次在終端執(zhí)行Python test.py,如下所示,調(diào)用動(dòng)態(tài)庫(kù)打印輸出執(zhí)行成功。

二:調(diào)用傳遞參數(shù)C++庫(kù)

在大多數(shù)情況下,我們使用動(dòng)態(tài)庫(kù)調(diào)用時(shí),都涉及參數(shù)傳遞,以下是簡(jiǎn)單的參數(shù)傳遞列子。

第一步:動(dòng)態(tài)庫(kù)封裝

testlib_global.h

#pragma once
 
#include <QtCore/qglobal.h>
#include <qDebug>
 
 
 
#ifndef BUILD_STATIC
# if defined(TESTLIB_LIB)
#  define TESTLIB_EXPORT Q_DECL_EXPORT
# else
#  define TESTLIB_EXPORT Q_DECL_IMPORT
# endif
#else
# define TESTLIB_EXPORT
#endif

testLib.h

#pragma once
 
#include "testlib_global.h"
 
class TESTLIB_EXPORT testLib
{
public:
    testLib();
 
	/**************************************************
	* @author 鬼魅-9527
	* @brief : 打印
	* @param-in: 無(wú)
	* @param-out : 無(wú)
	* @return : 是否成功
	* @date : 2025-01-01
	**************************************************/
	bool PrintfString();
	/**************************************************
	* @author 鬼魅-9527
	* @brief : 參數(shù)傳遞
	* @param-in: num:數(shù)量,str;字符串
	* @return :字符串長(zhǎng)度
	* @date : 2025-01-01
	**************************************************/
	int dataInputAndOutput(const int num, const char* str);
};
 
/*將接口轉(zhuǎn)義供外部調(diào)用*/
extern "C"
{
	testLib obj;
	extern "C" _declspec(dllexport) bool __cdecl PrintfString()
	{
		return obj.PrintfString();
	}extern "C" _declspec(dllexport) int __cdecl dataInputAndOutput(const int num, const char* str)
	{
		return obj.dataInputAndOutput(num, str);
	}
}

testLib.cpp

#pragma once
 
#include "testlib_global.h"
 
class TESTLIB_EXPORT testLib
{
public:
    testLib();
 
	/**************************************************
	* @author 鬼魅-9527
	* @brief : 打印
	* @param-in: 無(wú)
	* @param-out : 無(wú)
	* @return : 是否成功
	* @date : 2025-01-01
	**************************************************/
	bool PrintfString();
	/**************************************************
	* @author 鬼魅-9527
	* @brief : 參數(shù)傳遞
	* @param-in: num:數(shù)量,str;字符串
	* @return :字符串長(zhǎng)度
	* @date : 2025-01-01
	**************************************************/
	int dataInputAndOutput(const int num, const char* str);
};
 
/*將接口轉(zhuǎn)義供外部調(diào)用*/
extern "C"
{
	testLib obj;
	extern "C" _declspec(dllexport) bool __cdecl PrintfString()
	{
		return obj.PrintfString();
	}extern "C" _declspec(dllexport) int __cdecl dataInputAndOutput(const int num, const char* str)
	{
		return obj.dataInputAndOutput(num, str);
	}
}

4、下面我們可以編譯生成動(dòng)態(tài)

第二步:Python調(diào)用C++動(dòng)態(tài)庫(kù)

test.py

#導(dǎo)入Python調(diào)用c++的ctypes庫(kù)
import ctypes
 
# 加載dll
my_dll = ctypes.CDLL("Z:/Demo/testLib/x64/Release/testLib.dll")
 
# 調(diào)用dll中的函數(shù)
my_dll.PrintfString()
str1 = "Z:/Demo/testLib/x64/Release/testLib.dll"
str2 = my_dll.dataInputAndOutput(10,str1.encode("utf-8"))
print(str2);

通過(guò)終端執(zhí)行Python test.py,如下所示

到此這篇關(guān)于Python調(diào)用C++動(dòng)態(tài)庫(kù)詳細(xì)步驟(附源碼)的文章就介紹到這了,更多相關(guān)Python調(diào)用C++動(dòng)態(tài)庫(kù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python pytesseract驗(yàn)證碼識(shí)別庫(kù)用法解析

    Python pytesseract驗(yàn)證碼識(shí)別庫(kù)用法解析

    這篇文章主要介紹了Python pytesseract驗(yàn)證碼識(shí)別庫(kù)用法解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • 詳解python的變量緩存機(jī)制

    詳解python的變量緩存機(jī)制

    這篇文章主要介紹了python的變量緩存機(jī)制,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01
  • 在Python開(kāi)發(fā)環(huán)境中調(diào)用ChatGPT模型詳細(xì)過(guò)程

    在Python開(kāi)發(fā)環(huán)境中調(diào)用ChatGPT模型詳細(xì)過(guò)程

    在開(kāi)發(fā)過(guò)程當(dāng)中時(shí)常需要使用 ChatGPT 來(lái)完成一些任務(wù),但總是使用網(wǎng)頁(yè)交互模式去 Web 端訪問(wèn) ChatGPT 是很麻煩的,這時(shí)候我們可以使用代碼來(lái)調(diào)用 ChatGPT 模型,本文將詳細(xì)介紹在 Python 開(kāi)發(fā)環(huán)境中調(diào)用 ChatGPT 模型過(guò)程,,需要的朋友可以參考下
    2023-05-05
  • 基于Python制作三款起床鬧鐘的示例代碼

    基于Python制作三款起床鬧鐘的示例代碼

    每天上班最痛苦的事情就是早起早起早起!這是大部分上班族的痛苦,但是不上班又是不可能的啦,因?yàn)槎际菫榱烁沐X(qián)。本文用Python制作了三款有趣的鬧鐘,感興趣的可以學(xué)習(xí)一下
    2022-05-05
  • Python讀取二進(jìn)制文件代碼方法解析

    Python讀取二進(jìn)制文件代碼方法解析

    這篇文章主要介紹了Python讀取二進(jìn)制文件代碼方法解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • typing.Dict和Dict的區(qū)別及它們?cè)赑ython中的用途小結(jié)

    typing.Dict和Dict的區(qū)別及它們?cè)赑ython中的用途小結(jié)

    當(dāng)在 Python 函數(shù)中聲明一個(gè) dictionary 作為參數(shù)時(shí),我們一般會(huì)把 key 和 value 的數(shù)據(jù)類(lèi)型聲明為全局變量,而不是局部變量。,這篇文章主要介紹了typing.Dict和Dict的區(qū)別及它們?cè)赑ython中的用途小結(jié),需要的朋友可以參考下
    2023-06-06
  • python采集博客中上傳的QQ截圖文件

    python采集博客中上傳的QQ截圖文件

    這篇文章主要介紹了python采集博客中上傳的QQ截圖文件,因?yàn)槲募形臅?huì)在某些時(shí)候亂碼,例如這件的文件名QQ截圖20120926174732,所以需要采集出來(lái)修改掉,需要的朋友可以參考下
    2014-07-07
  • Pandas中如何對(duì)DataFrame列名進(jìn)行重命名

    Pandas中如何對(duì)DataFrame列名進(jìn)行重命名

    在做數(shù)據(jù)挖掘的時(shí)候,想改一個(gè)DataFrame的column名稱(chēng),所以就查了一下,下面這篇文章主要給大家介紹了關(guān)于Pandas中如何對(duì)DataFrame列名進(jìn)行重命名的相關(guān)資料,需要的朋友可以參考下
    2023-04-04
  • python創(chuàng)建ArcGIS shape文件的實(shí)現(xiàn)

    python創(chuàng)建ArcGIS shape文件的實(shí)現(xiàn)

    今天小編就為大家分享一篇python創(chuàng)建ArcGIS shape文件的實(shí)現(xiàn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-12-12
  • python 實(shí)現(xiàn)倒計(jì)時(shí)功能(gui界面)

    python 實(shí)現(xiàn)倒計(jì)時(shí)功能(gui界面)

    這篇文章主要介紹了python 實(shí)現(xiàn)倒計(jì)時(shí)功能(gui界面),幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-11-11

最新評(píng)論

沈阳市| 友谊县| 密山市| 巴里| 营山县| 阳东县| 宁乡县| 珠海市| 武清区| 秦皇岛市| 霍州市| 舟曲县| 翁牛特旗| 五寨县| 汝南县| 安平县| 梁河县| 湟中县| 新余市| 阿拉尔市| 东平县| 巴林右旗| 封开县| 陆川县| 洪江市| 澄迈县| 安徽省| 平遥县| 都兰县| 吉隆县| 嘉禾县| 永仁县| 合山市| 西乡县| 车险| 松阳县| 河间市| 宜城市| 丹棱县| 西乌| 沂南县|