栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Ctypes调用DLL

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Ctypes调用DLL

Ctypes调用DLL 0、dll的加载
class testDll(object):
    def __init__(self):
		self.dll = CDLL("testa.dll")
1、python传入指针,DLL将指针赋值,传回python: 1.1python部分代码:
def transToHexFromBytearray(dataarray):
    '''从bytearray转换成HEX'''
    return "".join(["%.2X" % c for c in dataarray])


def transToBytearrayFromHex(hexStr, length=None):
    '''从HEX字符串转换成bytearray'''
    return bytes.fromhex(hexStr)

def testa(self,testInt, testStr):
     testStr = transToBytearrayFromHex(testStr)#输入
     returnInt = c_int()  #返回
     returnData = create_string_buffer(256) #创建返回固定大小的字符缓存
     ret = self.dll.TransferChannel(testStr, testInt, byref(returnInt),byref(returnData))
     return ret, returnInt, transToHexFromBytearray(returnData.raw)
1.2C语言接口代码:
extern "C" testa int testa(char *testStr, int testInt, int &returnInt, char *returnData);
1.3调用:
#1.加载dll
testDll=testDll()
#调用方法
ret, returnInt,returnData=tstDll.testa(1,"AABBCC")
2.传入空结构体并返回

2.1python部分代码:

	class OemInfo(Structure):
    _fields_ = [("oemId", c_char * 21),
                ("carType", c_char * 2)]
    
    def getOemList(self):
        msg = create_string_buffer(128)
        lens = c_int(1)
        oemInfo1 = OemInfo()  # 初始化结构体
        ret = self.dll.testStructure(byref(oemInfo1), byref(lens), byref(msg))
        if (ret != 0):
            print(str(msg.value))
            return ret, None, None, None
        return ret, oemInfo1, lens, msg

2.2C语言接口代码:

typedef struct	_tag_OEM_INFO
{ 
	char oemId[21];
	char carType[2];
}OemInfo;

extern  "C" testa int testStructure(OemInfo  *arrOem,   int &len, char* msg);
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/656567.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号