from ctypes import *
os.chdir('/home/wuhao/eclipse-workspace/yunhsm_SDK_Test/data/')
sdkPath = os.getcwd()
cur = cdll.LoadLibrary(sdkPath + "/libtestapi.so")
return cur
self.uiLength = c_int(8)
self.random = (c_ubyte*self.uiLength.value)()
self.ret_generateRandom = cur.SDF_GenerateRandom(self.uiLength, self.random)
print "ret_generateRandom: " + str(self.ret_generateRandom)
A = (c_ubyte*8)() 对应 C 中的 unsigned char 类型
B = (c_ubyte*3)(1,2,3) 对应 C 中的 unsigned char 类型
C = c_uint(8) 对应 C 中的 unsigned int 类型
D = c_void_p 对应 C 中的 void 类型
Python 调用 ctypes 数据格式 | 意义 | C 中数据结构 |
---|---|---|
A = (c_ubyte*8)() | 用 Python 定义一个长度为 8 的数组,数组中内容默认赋值全 0 | 对应 C 中的 unsigned char 类型 |
B = (c_ubyte*3)(1,2,3) | 用 Python 定义一个长度为 3 的数组,数组中内容为 1,2,3 | 对应 C 中的 unsigned char 类型 |
C = c_uint(8) | 定义一个 int 型变量,值为 8 | 对应 C 中的 unsigned int 类型 |
D = c_void_p | 定义一个 void 型变量 | 对应 C 中的 void 类型 |
-typedf struct ECCrefPublicKey_st{
unsigned int bits;
unsigned char K[ECCref_MAX_LEN]
}ECCrefPrivateKey
from ctypes import *
from ctypes import c_ubyte
from ctypes import c_int
class ECCrefPublicKey(Structure):
_fields_ = [("bits", c_uint),
("K", c_ubyte*64)]
int SDF_ExternalVerify_ECC(
void *hSessionHandle,
ECCrefPublicKey *pucPublicKey,
)
2.Python 中传入结构体参数的方法:
self.eccPublicKey = ECCrefPublicKey()
self.ret_ExternalVerifyECC = self.cur.SDF_ExternalVerify_ECC(hSessionHandle, byref(self.eccPublicKey))
int SDF_OpenDevice(void **phDeviceHandle);
self.hDeviceHandle = c_void_p(0)
self.ret_OpenDevice = self.cur.SDF_OpenDevice(byref(self.hDeviceHandle))
目前使用 ctypes 模块和以上数据类型,能够满足工作中对动态链接库的接口测试需求,如果工作中涉及到了新得数据类型,后续也会继续进行补充,希望可以帮到大家。