Cdll与windll

来源:互联网 发布:柠檬绿茶 淘宝 编辑:程序博客网 时间:2024/05/16 11:45
#python版本是3.5. 
#需要用python调用c++的trade.dll(交易程序) 
  
>>>import ctypes 
>>>tdx=ctypes.CDLL('trade.dll') 
>>>tdx.OpenTdx() 

>>>tdx.CloseTdx() 

  
# 到这里都显示正常,说明不需要传送参数下,调用运行都是正常的?? 
# 下面我尝试调用输入参数的函数Logon 
  
# dll文件中的说明  int  Logon(char* IP, short Port, char* Version, short YybID, char* AccountNo, char* TradeAccount, char* JyPassword, char* TxPassword, char* ErrInfo); 
  
  
>>>IP=ctypes.c_char_p(b"225.120.41.57") 
>>>Port=ctypes.c_short(443) 
>>>Version=ctypes.c_char_p(b"3,5") 
>>>YydID=ctypes.c_int(0) 
>>>AccountNO=ctypes.c_char_p(b"234")   
>>>TradeNO=ctypes.c_char_p(b"234") 
>>>Jypassword=ctypes.c_char_p(b"000000") 
>>>Txpassword=ctypes.c_char_p(b"666666") 
>>>ErrInfo=ctypes.c_char_p(b"") 
>>>clientID=Tdx.Logon(IP,Port,Version,YydID,AccountNO,TradeNO,Jypassword,Txpassword,ErrInfo) 
  
没有登陆,显示错误为“ValueError:Procedure called with not enough arguments(36 buytes missing) or wrong calling convention”。 
我是python小白,也是编程的小白,看了一些资料,感觉可能性就是传入的参数数据不是c++的dll需要的数据类型。比如>>>IP,看资料输出结果是c_char_p(b"225.120.41.57"),但我的>>>IP后,输出结果是“c_char_p(145443664)”,>>>IP.value的输出结果倒是b"221.130.41.57",与一些课程说的一样。 
  
我的问题是:1、调用dll是不是没有问题?毕竟tdx.OpenTdx()和tdx.CloseTdx()都是成功的。 
             2、IP=ctypes.c_char_p(b"225.120.41.57")中,IP是不是ctypes中的c_char_p型,对应c++中的char*?,为何>>>IP后,输出结果和网络上一些老师写的输出结果不同。 
             3,如果不是参数数据类型的问题,可能是其他什么问题导致不能登录。 

            请教了。 

采用windll姐姐问题

0 0
原创粉丝点击