天天看點

Python&C++互相混合調用程式設計全面實戰-08ctypes擷取函數的傳回值

作者:虛壞叔叔

早餐店不會開到晚上,想吃的人早就來了!😄

ctypes擷取函數的傳回值

如何通過​

​ctypes​

​​擷取​

​c語言​

​的傳回值。首先需要考慮的是傳回值的記憶體的空間在哪邊。加入傳回的是指針 需要考慮到指針的空間在哪邊釋放,這算是一個比較危險的操作,假定你在c中申請了空間,在Python中就沒有辦法釋放,就會出現問題,

傳回值之前我們都是用​

​void​

​​,如果你沒設定傳回值,預設的就都是​

​int​

​。

可以通過如下代碼制定傳回類型:

lib.CFuntion.restype = c_char_p      

一、實戰

c++中定義好了3個函數,

XLIB int TestReturnInt()
{
  return 101;
}

XLIB char* TestReturnChar()
{
  return "TestReturnCHar String";
}

XLIB wchar_t* TestReturnWChar()
{
  return L"TestReturnWCHar String";
}      
Python&C++互相混合調用程式設計全面實戰-08ctypes擷取函數的傳回值

來到Python代碼當中,

print("Test Ctypes")
from ctypes import *

#導入庫 windows中dll字尾名不用加
lib = CDLL("C:\\Users\\Administrator\\Desktop\\testctypes\\x64\\Debug\\testctypes")

try:
    print("TestReturnInt=", lib.TestReturnInt())
    lib.TestReturnChar.restype = c_char_p
    print("TestReturnChar=", lib.TestReturnChar())
    lib.TestReturnWChar.restype = c_wchar_p
    print("TestReturnWChar=", lib.TestReturnWChar())
except Exception as ex:
    print("testCtypes Error", ex)
# 等待使用者輸入,程式不退出
input()        

二、總結

  • 本文使用Qctypes擷取函數的傳回值 。