python調用c/c++方法


# python調用c/c++方法:一般先將c++代碼轉化為C類型dll(推薦使用靜態dll,否則容易出現各種鏈接庫問題;記得使用extern "C" _declspec(dllexport))
# extern "C" _declspec(dllexport) int iadd(int a ,int b)
# return a + b;
#
# extern "C" _declspec(dllexport) char* padd()
# return "test pythondll";
#
# extern "C" _declspec(dllexport) char* pxadd(char *p)
# return p;

# c++大數據量結果返回時候需要特殊處理
# CString gstrData;//全局變量釋放
# extern "C" _declspec(dllexport) char* pcx_add(char *p)
# gstrData = CString(p);//p的內容超過1024字節以上推薦
# return (char*)gstrData.GetBuffer(0);

# extern "C" _declspec(dllexport) void py_ClearMenmory()
# {
# gstrData.ReleaseBuffer();
# }

class PythonDll:
def __init__(self):
if sys.maxsize > 2 ** 32:
pydll = ctypes.cdll.LoadLibrary(r'64.dll')
else:
pydll = ctypes.cdll.LoadLibrary(r'32.dll')
"""
1.int 類型
"""
pydll.iadd.restype = ctypes.c_int
idata = pydll.iadd(1, 2)
print(idata)

"""
2.char* 類型
"""
pydll.padd.restype = ctypes.c_char_p
pdata = pydll.padd()
print(pdata)

"""
3.char* 類型 參數char*
"""
pydll.pxadd.restype = ctypes.c_char_p
pdata = pydll.pxadd("test pythondll".encode(encoding="gbk"))
        print(pdata)

"""
4.char* 類型 參數char* 中文需要轉化
"""
pydll.pxadd.restype = ctypes.c_char_p
pdata = pydll.pxadd("測試 pythondll".encode(encoding="gbk"))
print(str(pdata, encoding="gbk"))

"""
5.char* 類型 參數char* 中文需要轉化(返回值內容無限大)
"""
pydll.pcx_add.restype = ctypes.c_char_p
pdata = pydll.pcx_add("測試 pythondll..........".encode(encoding="gbk"))
print(str(pdata, encoding="gbk"))
pydll.py_ClearMenmory() # 釋放內存


免責聲明!

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



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