我搜索了大约两天的方法来解决调用函数的问题:
int HG_GetProgList (sHG_ProgSlot** list)
用python从DLL。sHG\u ProgSlot是一个结构:
typedef struct //---- data set of a 'program slot' in the RDS-coder
{
char strname [9];
int slot;
int bytes;
int groups;
int times;
int next_slot;
} sHG_ProgSlot;
dll中函数的说明如下:
RDSHG81300B_API int __stdcall HG_GetProgList (sHG_ProgSlot** list);
//该DLL包含一个sHG\u ProgSlot数组,其中包含所有占用的“程序槽”。你知道吗
//条目按其插槽号升序排序。你知道吗
//此函数将指向此数组的指针复制到函数参数。你知道吗
//(使用HG\u GetNumberOfProgs()获取数组的长度。)
//输入:list-要设置的指针
//输出:0=无错误
我写了下面的代码:
class RDSCoderService(object):
def GetProgramList(self, programList):
getProgListFunction = self.RDS_Lib['HG_GetProgList]
getProgListFunction.argtypes = [ctypes.POINTER(ctypes.POINTER(sHG_ProgSlot*60))]
getProgListFunction.restype = ctypes.c_int
return getProgListFunction(programList)
class sHG_ProgSlot(ctypes.Structure):
_fields_ = [("strname", ctypes.c_char*9),
("slot", ctypes.c_int),
("bytes", ctypes.c_int),
("groups", ctypes.c_int),
("times", ctypes.c_int),
("next_slot", ctypes.c_int)]
函数调用:
rds=RDSCoderService()
struct_p=ctypes.POINTER(sHG_ProgSlot) #pointer to a structure type
arr_of_struct_pointer=struct_p*60 #array of pointers to a struct type of size 60
instance_array=arr_of_struct_pointer() # instance array
p_inst_array=ctypes.pointer(instance_array)# pointer to array
Message=rds.GetProgramList(p_inst_array) #calling of function
谢谢你的帮助!你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐