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

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

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

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

第一步:動(dòng)態(tài)庫封裝(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、下面我們簡單寫一個(gè)打印“vs2017+qt5.12.10生成動(dòng)態(tài)庫”的輸出函數(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 : 說明
	* @param-in: 無
	* @param-out : 無
	* @return : 無
	* @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)庫");
 
	return true;
}

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

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

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

test.py

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

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

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

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

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

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

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

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: 無
	* @param-out : 無
	* @return : 是否成功
	* @date : 2025-01-01
	**************************************************/
	bool PrintfString();
	/**************************************************
	* @author 鬼魅-9527
	* @brief : 參數(shù)傳遞
	* @param-in: num:數(shù)量,str;字符串
	* @return :字符串長度
	* @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: 無
	* @param-out : 無
	* @return : 是否成功
	* @date : 2025-01-01
	**************************************************/
	bool PrintfString();
	/**************************************************
	* @author 鬼魅-9527
	* @brief : 參數(shù)傳遞
	* @param-in: num:數(shù)量,str;字符串
	* @return :字符串長度
	* @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)庫

test.py

#導(dǎo)入Python調(diào)用c++的ctypes庫
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);

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

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

相關(guān)文章

  • opencv實(shí)現(xiàn)簡單人臉識(shí)別

    opencv實(shí)現(xiàn)簡單人臉識(shí)別

    這篇文章主要為大家詳細(xì)介紹了opencv實(shí)現(xiàn)簡單人臉識(shí)別,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • Python實(shí)現(xiàn)按逗號(hào)分隔列表的方法

    Python實(shí)現(xiàn)按逗號(hào)分隔列表的方法

    今天小編就為大家分享一篇Python實(shí)現(xiàn)按逗號(hào)分隔列表的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • 用Django實(shí)現(xiàn)一個(gè)可運(yùn)行的區(qū)塊鏈應(yīng)用

    用Django實(shí)現(xiàn)一個(gè)可運(yùn)行的區(qū)塊鏈應(yīng)用

    這篇文章主要介紹了用Django實(shí)現(xiàn)一個(gè)可運(yùn)行的區(qū)塊鏈應(yīng)用,需要的朋友可以參考下
    2018-03-03
  • python中日志logging模塊的性能及多進(jìn)程詳解

    python中日志logging模塊的性能及多進(jìn)程詳解

    使用Python來寫后臺(tái)任務(wù)時(shí),時(shí)常需要使用輸出日志來記錄程序運(yùn)行的狀態(tài),并在發(fā)生錯(cuò)誤時(shí)將錯(cuò)誤的詳細(xì)信息保存下來,以別調(diào)試和分析。Python的logging模塊就是這種情況下的好幫手。本文就介紹了python中日志logging模塊性能及多進(jìn)程的相關(guān)資料,需要的朋友可以參考下。
    2017-07-07
  • Python實(shí)現(xiàn)將PowerPoint轉(zhuǎn)為HTML格式

    Python實(shí)現(xiàn)將PowerPoint轉(zhuǎn)為HTML格式

    有時(shí)我們需要將精心設(shè)計(jì)的PPT發(fā)布到網(wǎng)絡(luò)上以便于更廣泛的訪問和分享,本文將介紹如何使用Python將PowerPoint轉(zhuǎn)換為HTML格式,需要的可以參考下
    2024-04-04
  • Python使用everything庫構(gòu)建文件搜索和管理工具

    Python使用everything庫構(gòu)建文件搜索和管理工具

    在這篇博客中,我將分享如何使用 Python 的 everytools庫構(gòu)建一個(gè)簡單的文件搜索和管理工具,這個(gè)工具允許用戶搜索文件、查看文件路徑、導(dǎo)出文件信息到 Excel,以及生成配置文件,文中有相關(guān)的代碼示例供大家參考,需要的朋友可以參考下
    2024-08-08
  • Python中argparse模塊命令行參數(shù)詳細(xì)解析

    Python中argparse模塊命令行參數(shù)詳細(xì)解析

    本文系統(tǒng)介紹Python?argparse模塊,涵蓋其核心功能:解析命令行參數(shù)、自動(dòng)生成幫助文檔、支持位置參數(shù)與可選參數(shù)、提供類型驗(yàn)證及錯(cuò)誤處理、實(shí)現(xiàn)子命令系統(tǒng)等,幫助開發(fā)者創(chuàng)建用戶友好的命令行工具,需要的朋友跟隨小編一起學(xué)習(xí)吧
    2025-08-08
  • Python調(diào)用Windows API函數(shù)編寫錄音機(jī)和音樂播放器功能

    Python調(diào)用Windows API函數(shù)編寫錄音機(jī)和音樂播放器功能

    這篇文章主要介紹了Python調(diào)用Windows API函數(shù)編寫錄音機(jī)和音樂播放器功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-01-01
  • Python 創(chuàng)建子進(jìn)程模塊subprocess詳解

    Python 創(chuàng)建子進(jìn)程模塊subprocess詳解

    這篇文章主要介紹了Python 創(chuàng)建子進(jìn)程模塊subprocess詳解,本文詳細(xì)講解了subprocess模塊的方法、參數(shù)、使用實(shí)例等,需要的朋友可以參考下
    2015-04-04
  • Python中selenium_webdriver下拉框操作指南

    Python中selenium_webdriver下拉框操作指南

    selenium 雖然過了這么多年,但是到目前為止依然是比較流行的自動(dòng)化框架了,下面這篇文章主要給大家介紹了關(guān)于Python中selenium_webdriver下拉框操作的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-01-01

最新評(píng)論