Windows系統Python直接調用C++ DLL


環境:Window 10,VS 2019, Python 2.7.12, 64bit

1,打開 VS 2019,新建C++ Windows 動態鏈接庫工程 Example,加入下列文件,如果Python是64位的則在VS中 Solution platforms 選擇 x64 編譯成64位的 DLL;

Example.h

 1 #pragma once
 2 
 3 #ifndef CPP_EXPORTS
 4 #define CPP_EXPORTS
 5 #endif
 6 
 7 #ifdef CPP_EXPORTS
 8 #define CPP_API _declspec(dllexport)
 9 #else 
10 #define CPP_API _declspec(dllimport)
11 #endif
12 
13 #include <iostream>
14 using namespace std;
15 
16 #ifdef __cplusplus
17 extern "C"
18 {
19 #endif
20 
21     CPP_API int __cdecl getInt();
22     CPP_API const char* __cdecl getString();
23     CPP_API void __cdecl setString(const char* str);
24 
25 #ifdef __cplusplus
26 }
27 #endif

 

Example.cpp

 1 #include "pch.h"
 2 #include "Example.h"
 3 
 4 CPP_API int __cdecl getInt()
 5 {
 6     return 5;
 7 }
 8 
 9 CPP_API const char* __cdecl getString()
10 {
11     return "hello";
12 }
13 
14 CPP_API void __cdecl setString(const char* str)
15 {
16     cout << str << endl;
17 }

 

編譯,得到 Example.dll

 

2, 打開 Command,cd 到 Example.dll 所在目錄,輸入 Python2,進入python環境

>>> from ctypes import *
>>> dll = CDLL("Example.dll")
>>> print dll.getInt()
5

>>> getStr = dll.getString
>>> getStr.restype = c_char_p
>>> pChar = getStr()
>>> print c_char_p(pChar).value
hello

>>> setStr = dll.setString
>>> setStr.argtypes = [c_char_p]
>>> pStr = create_string_buffer("hello")
>>> setStr(pStr)
hello
-1043503984


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM