from ctypes import *
try:
# 导入库dll,后缀名不用加上去,导入库dll函数为CDLL
lib = CDLL("testDll")
lib.TsetCtypes()
lib.TsetCtypes_number(101, c_float(99.1), True) # c_float转换浮点数
asda_b = b"asdasd"
lib.TsetCtypes_StringA(asda_b, len("asdasd")) # b转换字符串,这个是byte字节
# lib.TsetCtypes_StringA(asda_b, len("asdasd")) # b转换字符串,这个是byte字节
wstr = "ctypes"
wstr_w = c_wchar_p(wstr) # 宽字符
lib.TsetCtypes_StringW(wstr, len(wstr))
# 字符串是不能更改的,如果需要更改,重新定义一个BUFFER
buf = create_string_buffer(100)
lib.TsetCtypes_Buffer(buf)
# print(buf.raw,buf.value,len(buf))
# 测试函数返回int类型
# int类型的不需要做数据类型的转接,可以直接返回值使用
A = lib.TestReturnInt()
print('TestReturnInt is :', A)
# 测试函数返回byte字符串byte
# 返回的值就是byte类型的。
lib.TestReturnChar.restype = c_char_p;
A1 = lib.TestReturnChar()
print('TestReturnChar is :', A1)
# 测试函数返回宽字符串
# 返回的值就是类型的str类型的。
lib.TestReturnWChar.restype = c_wchar_p;
A2 = lib.TestReturnWChar()
print(type(A2))
print('TestReturnWChar is :', A2)
# 测试函数返回指针类型POINTER
lib.TestPointer.argtypes = (POINTER(c_float),) # 传输类型需要传递元组
lib.TestPointer.restype = POINTER(c_int) # 返回指针类型
A3_float = c_float(88.8)
print('begin A3_float = ', A3_float)
# byref返回指针
re = lib.TestPointer(byref(A3_float)) # 传入浮点数的指针,对指针所对用的地址进行更改
print(&
Python调用Dll学习过程
最新推荐文章于 2024-07-31 11:44:05 发布
本文详细记录了使用Python调用动态链接库(DLL)的学习过程,从基础知识到实际操作,包括如何导入DLL、调用DLL函数以及解决可能出现的问题。通过实例解析,深入理解Python与DLL交互的机制。
摘要由CSDN通过智能技术生成