python引用C++ DLL文件若干解釋及示例

python引用C++ DLL文件若干解釋及示例

首先說一下,python不支持C++的DLL,但是支持C的DLL;C++因爲和C兼容可以編譯爲C的DLL,這是下面文章的背景與前提


首先我這兒的示例使用VS2017編譯的DLL,先講過程,再解釋

第一步,新建DLL項目

在這裏插入圖片描述

確定之後我們可以看到默認的文件

在這裏插入圖片描述

這時候我們需要新建一個與Test.cpp對應的頭文件
在這裏插入圖片描述

這是完成之後的代碼結構
在這裏插入圖片描述

下面是Test.h文件的內容和Test.cpp文件的內容及相應解釋

// Test.cpp : 定義 DLL 應用程序的導出函數。
//

#include "stdafx.h"
#include "Test.h"

bool Test1()
{
	return true;
}

bool Test2()
{
	return false;
}

首先我們需要引用Test.h,也就是我們剛剛建立的與之匹配的頭文件

Test1和Test2就是我們寫的python需要調用的函數,因爲python在調用DLL時除了int型其他的返回類型都需要指定,所以我用bool來展示

//Test.h


#pragma once
extern "C" __declspec(dllexport) bool Test1();
extern "C" __declspec(dllexport) bool Test2();

這是我們建立的頭文件

第一行VS自動生成,不用管它,它的作用是保證頭文件只被編譯一次

第二行和第三行就是我們要添加的代碼,這兩行就是我們定義的函數,有點像以前學C語言的時候老師說的定義在main函數後面的函數要在前面先寫一次,記住這個形式就好了。我來講講前面的代表什麼意思

  • extern “C”

這個的意思是聲明的函數可以被其他模塊調用,並且編譯爲C文件

  • __declspec(dllexport)

這是MS VC中專用的關鍵字,表示將函數、類等聲明爲導出函數,供其他程序調用

這兩個加起來添加到頭文件裏,聲明的函數編譯出來就可以被python調用了

python調用方法也很簡單

from ctypes import *
dll = CDLL("Test.dll")
dll.Test1.restype = c_bool
# restype是函數的返回類型,c_bool代表返回bool類型,這裏的對應關係就自己查一下了
# 除了restype還有argtypes,代表函數的參數類型
print(dll.Test1())

整體大致就是這樣了,如果沒成功可以給我留言看看,我也是個新手,最近因爲一個項目纔用到Python,如果有什麼不對的請批評指正

關於ctypes的部分,主要參考了這篇博文,感謝”無盡的數字眩暈症“

https://www.cnblogs.com/night-ride-depart/p/4907613.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章