python呼叫dll動態庫

2021-07-25 09:57:36 字數 848 閱讀 2442

python呼叫動態庫有兩種型別,主要看dll的匯出函式的呼叫約定:__stdll和__cdecl

對應的動態庫的呼叫方式為

ctypes.cdll.loadlibrary( 'test.dll' )對應__cdecl呼叫方式

ctypes.windll.loadlibrary( 'test.dll' )對應_stdll呼叫方式

test.h檔案

#include

#include

//因為給python測試,預設不給c\c++程式呼叫,所以直接寫__declspec(dllexport),如果要給c\c++呼叫,需要自己定義巨集決定__declspec(dllexport)是匯入還是匯出

extern "c"

;test.cpp檔案

#include "test.h"

__declspec(dllexport) int __cdecl test(wchar_t* a, int len)

呼叫動態庫的test.py檔案

#coding=utf-8

import ctypes

slen = 4

sbuf = 'aaaaaaaaaabbbbbbbbbbbbbb'

adll = ctypes.cdll.loadlibrary( 'pydll.dll' )

##傳入的引數是寬字元

adll.test(sbuf, 123);

input("press enter to quit")  

如果呼叫方式不匹配可能報valueerror: procedure probably called with too many arguments (8 bytes in excess)錯誤

動態呼叫DLL

有靜態和動態兩種,靜態的需要lib而動態的只需要乙個dll就可以了 但是要知道函式的定義一般是標頭檔案 動態相對複雜一點!但是掌握了也不是很難 第一步 定義函式指標就是你要呼叫的函式,引數必須一致,不然就記憶體洩露 typedef handle pascal open char int 第二步 定義...

DLL動態呼叫

動態鏈結庫,靜態鏈結庫,動態呼叫,靜態呼叫,前面老是搞混,現在總算差不多明白了,再多用用幾次就好了 靜態呼叫可以當作普通的靜態庫那樣用,動態呼叫就得用 來呼叫 同時生成的 檔案,動態鏈結庫中的 與靜態鏈結的 檔案是不一樣的,乙個是只含有入口位址,沒有函式內容,而另乙個 靜態 的是都有 1 引言 動態...

呼叫動態鏈結庫(dll)

步驟 1.tools options projects and solutions vc directories分別在包含檔案,庫檔案填加了路徑 這些路徑只告訴編譯器怎麼找檔案,沒有說把那裡面的檔案加入工程.若不設定,編譯報錯 無法開啟 檔案 2.project properties c c gen...