亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Python > 正文

Python調用C/C++動態鏈接庫的方法詳解

2020-02-23 05:35:58
字體:
來源:轉載
供稿:網友

本文以實例講解了Python調用C/C++ DLL動態鏈接庫的方法,具體示例如下:

示例一:

首先,在創建一個DLL工程(本例創建環境為VS 2005),頭文件:

//hello.h#ifdef EXPORT_HELLO_DLL#define HELLO_API __declspec(dllexport)#else#define HELLO_API __declspec(dllimport)#endifextern "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;}

這里有兩個注意點:

(1)弄清楚編譯的時候函數的調用約定采用的__cdecl還是__stdcall,因為根據DLL中函數調用約定方式,Python將使用相應的函數加載DLL。

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

我的工程中采用__cdecl函數調用約定方式進行編譯鏈接產生hello.dll,然后Python中采用ctypes庫對hello.dll進行加載和函數調用:

from ctypes import *dll = cdll.LoadLibrary('hello.dll');ret = dll.IntAdd(2, 4);print ret;

至此,第一個小例子已經完成了,讀者可以自己動手嘗試一下運行效果。

示例二:

示例一只是一個"hello world"級別的程序,實際運用中更多的需要傳遞數據結構、字符串等,才能滿足我們的需求。那么本示例將展示,如何傳遞數據結構參數,以及如何通過數據結構獲取返回值。

首先編寫DLL工程中的頭文件:

//hello.h#ifdef EXPORT_HELLO_DLL#define HELLO_API __declspec(dllexport)#else#define HELLO_API __declspec(dllimport)#endif#define ARRAY_NUMBER 20#define STR_LEN 20struct StructTest{ int number; char* pChar; char str[STR_LEN]; int iArray[ARRAY_NUMBER];};extern "C"{ //HELLO_API int IntAdd(int , int); HELLO_API char* GetStructInfo(struct StructTest* pStruct);}

CPP文件如下:

//hello.cpp#include <string.h>#define EXPORT_HELLO_DLL#include "hello.h"HELLO_API char* GetStructInfo(struct StructTest* pStruct){ for (int i = 0; i < ARRAY_NUMBER; i++) pStruct->iArray[i] = i; pStruct->pChar = "hello python!"; strcpy (pStruct->str, "hello world!"); pStruct->number = 100; return "just OK";}

GetStructInfo這個函數通過傳遞一個StructTest類型的指針,然后對對象中的屬性進行賦值,最后返回"just OK".

編寫Python調用代碼如下,首先在Python中繼承Structure構造一個和C DLL中一致的數據結構StructTest,然后設置函數GetStructInfo的參數類型和返回值類型,最后創建一個StructTest對象,并將其轉化為指針作為參數,調用函數GetStrcutInfo,最后通過輸出數據結構的值來檢查是否調用成功:

from ctypes import *ARRAY_NUMBER = 20;STR_LEN = 20;#define typeINTARRAY20 = c_int * ARRAY_NUMBER;CHARARRAY20 = c_char * STR_LEN;#define structclass StructTest(Structure):  _fields_ = [    ("number", c_int),    ("pChar", c_char_p),    ("str", CHARARRAY20),    ("iArray", INTARRAY20)        ]#load dll and get the function objectdll = cdll.LoadLibrary('hello.dll');GetStructInfo = dll.GetStructInfo;#set the return typeGetStructInfo.restype = c_char_p;#set the argtypesGetStructInfo.argtypes = [POINTER(StructTest)];objectStruct = StructTest();#invoke api GetStructInforetStr = GetStructInfo(byref(objectStruct));#check resultprint "number: ", objectStruct.number;print "pChar: ", objectStruct.pChar;print "str: ", objectStruct.str;for i,val in enumerate(objectStruct.iArray):  print 'Array[i]: ', val;print retStr;            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲男人的天堂在线| 国产精品久久久久久久久久ktv| 中文字幕v亚洲ⅴv天堂| 久久天天躁狠狠躁夜夜躁2014| 另类少妇人与禽zozz0性伦| 日韩中文字幕网址| 亚洲第一网站男人都懂| 精品欧美激情精品一区| 中文字幕av一区中文字幕天堂| 欧美黑人性视频| 欧美亚洲伦理www| 久久91亚洲精品中文字幕| 日韩精品在线观看网站| 国产成人激情小视频| 情事1991在线| 91成人在线观看国产| 三级精品视频久久久久| 日韩高清电影免费观看完整| 91精品国产自产在线老师啪| 久久99精品久久久久久青青91| 国产高清在线不卡| 亚洲成人激情在线| 在线观看日韩www视频免费| 视频在线观看99| 亚洲精品美女免费| 欧美精品18videosex性欧美| 欧美黑人xxxⅹ高潮交| 91久久久久久久久久久| 亚洲影院高清在线| 青青青国产精品一区二区| 亚洲网址你懂得| 欧美精品xxx| 97久久精品在线| 久久精品国产96久久久香蕉| 九九九久久国产免费| 欧美日韩免费看| 亚洲欧美日韩一区二区在线| 精品国产一区二区三区四区在线观看| 亚洲精品美女久久久久| 国外成人在线直播| 国产专区精品视频| 久久久视频免费观看| 久久精品国产96久久久香蕉| 亚洲香蕉在线观看| 欧美日韩国产麻豆| 91日本在线视频| 最新国产成人av网站网址麻豆| 久久人人爽人人爽人人片av高请| 精品久久久久久久久中文字幕| 在线观看国产欧美| 亚洲欧美日韩精品久久| 国内伊人久久久久久网站视频| 91免费在线视频网站| 8x海外华人永久免费日韩内陆视频| 欧美激情精品久久久久久| 在线播放日韩精品| 日韩精品中文字| 91日韩在线视频| 日韩av在线不卡| 97在线免费视频| 亚洲精品久久久一区二区三区| 国产精品电影一区| 日韩在线观看av| 亚洲xxx大片| 国产在线精品一区免费香蕉| 久久久影视精品| 欧美激情一区二区三级高清视频| 亚洲最大av在线| 国产黑人绿帽在线第一区| 午夜精品视频在线| 96国产粉嫩美女| 欧美国产在线电影| 91精品久久久久久久久久| 一区二区三区国产在线观看| 最近2019中文字幕大全第二页| 国产午夜精品全部视频在线播放| 操人视频在线观看欧美| 欧美日韩国产在线| 91精品国产综合久久久久久久久| 97精品伊人久久久大香线蕉| 亚洲美女性生活视频| 日韩欧美aaa| 欧美午夜精品伦理| 国产69精品久久久| 中文欧美在线视频| 91精品中国老女人| 国产精品亚洲激情| 成人亚洲激情网| 日韩在线国产精品| 国内精品一区二区三区| 亚洲一区二区福利| 亚洲欧美www| 成人精品一区二区三区电影免费| 乱亲女秽乱长久久久| 欧美日韩国产综合新一区| 成人性教育视频在线观看| 亚洲精品在线视频| 亚洲香蕉伊综合在人在线视看| 日韩一区二区在线视频| 久久久久免费精品国产| 久久久久久com| 97国产在线观看| 精品国产户外野外| 亚洲国产女人aaa毛片在线| 38少妇精品导航| 久久精品99无色码中文字幕| 日韩精品高清在线观看| 韩国三级日本三级少妇99| 亚洲男人天堂手机在线| 国产精品日韩在线一区| 久久精品国产2020观看福利| 国产亚洲人成a一在线v站| 国产亚洲视频中文字幕视频| 欧美午夜丰满在线18影院| 亚洲欧洲偷拍精品| 国产欧美久久一区二区| 亚洲欧美日韩爽爽影院| 欧美精品在线观看| 日韩综合视频在线观看| 亚洲国产精品va在线| 97超级碰碰人国产在线观看| 91精品久久久久久久久久另类| 亚洲色图色老头| 91久久久久久久久| 久久97精品久久久久久久不卡| 国产精品91久久久| 亚洲久久久久久久久久| 亚洲的天堂在线中文字幕| 国产免费一区二区三区在线能观看| 久久激情五月丁香伊人| 欧美精品免费看| 国内免费久久久久久久久久久| 琪琪亚洲精品午夜在线| 欧美激情精品久久久久| 国产免费一区二区三区在线观看| 中文字幕久热精品在线视频| 亚洲国产一区二区三区四区| 亚洲视频一区二区三区| 日本精品久久久| 大桥未久av一区二区三区| 激情懂色av一区av二区av| 亚洲天堂av在线免费| 日韩亚洲欧美中文高清在线| 久久99国产精品久久久久久久久| 日韩视频―中文字幕| 欧美人在线视频| 亚洲伊人一本大道中文字幕| xxxxx成人.com| 久久国产精品久久久| 精品magnet| 欧美亚洲午夜视频在线观看| 欧美福利在线观看| 热门国产精品亚洲第一区在线| 成人免费观看网址| 国产日韩精品在线播放| 日韩理论片久久| 国产精品网址在线| 久久久久久久久久久国产| 精品国产老师黑色丝袜高跟鞋| 国产成人精彩在线视频九色| 久久精品久久久久久国产 免费| 欧美精品免费看| 精品国产一区二区三区久久久狼| 国产精品一区二区三|