C++呼叫動態函式庫兩種方式和Python呼叫C++動態函式庫

WBOY
發布: 2023-04-08 12:45:01
轉載
3443 人瀏覽過

建立動態庫

動態庫是在程式執行時載入的庫文件,並不佔用程式本身大小。

選擇動態函式庫專案:

C++呼叫動態函式庫兩種方式和Python呼叫C++動態函式庫

新.h和.cpp檔:

C++呼叫動態函式庫兩種方式和Python呼叫C++動態函式庫

# cat.h
#pragma once
extern "C" _declspec(dllexport) int sum(int a, int b);
登入後複製
# cat.cpp
#include "pch.h"
#include "cat.h"
extern "C" _declspec(dllexport) int sum(int a, int b) {
return a + b;
}
登入後複製

動態庫發布選擇Release版本,本範例使用×64位元。

C 導入動態庫方法一

C++呼叫動態函式庫兩種方式和Python呼叫C++動態函式庫

新建一個空的C 項目,將動態庫項目中.lib和.dll檔案拷貝到目前項目下:

C++呼叫動態函式庫兩種方式和Python呼叫C++動態函式庫

在C 專案中,新增動態庫頭文件,可以不複製到目前專案下,新增現有項就可以,這裡只需要邏輯上引入,但是在#include時要使用.h檔的路徑,絕對路徑和相對路徑都可以。

C++呼叫動態函式庫兩種方式和Python呼叫C++動態函式庫

#include 
#include "../../CATDLL/CATDLL/cat.h"
using namespace std;
#pragma comment(lib, "CATDLL.lib")
int main() {
cout << sum(1, 2) << endl;
return 0;
}
登入後複製
  • h頭檔:包含dll中宣告輸出的資料結構、類別、函數等資訊。
  • lib函式庫檔案:包含被DLL匯出的專案的名稱和位置,在呼叫dll的應用程式執行檔中,存放的並不是被呼叫的函數程式碼,而是DLL中所要呼叫的項目的記憶體位址。
  • dll動態庫:包含實際的內容,發佈時只需要.exe檔案和.dll文件,在同一個目錄下。

也可以在項目-屬性-連結器-輸入-附加相依性中進行設定:

C++呼叫動態函式庫兩種方式和Python呼叫C++動態函式庫

可以省略:#pragma comment( lib, "CATDLL.lib")

C 導入動態函式庫方法二

#include 
#include 
using namespace std;
typedef int (*PSUM)(int, int);
int main() {
HMODULE hMoudle = LoadLibrary(TEXT("CATDLL.dll"));
PSUM psum = (PSUM)GetProcAddress(hMoudle, "sum");
cout << psum(4, 5) << endl;
FreeLibrary(hMoudle);
return 0;
}
登入後複製

Python導入C 動態函式庫

由於C dll是64位,Python也要使用64位元.

import os
from ctypes import *
os.chdir("D:Cat课件CAT_CODINGC++项目开发MFC进阶和动态库注入辅助PYTEST")
dll = cdll.LoadLibrary("CATDLL.dll")
ret = dll.sum(1, 2)
print(ret)
登入後複製

這樣,很多常用的功能都可以用 C 製作成動態函式庫,供 C 或Python等其他語言進行呼叫。

以上是C++呼叫動態函式庫兩種方式和Python呼叫C++動態函式庫的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:51cto.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!