参数很多,查起来可能不是那么容易,byMsgID 这个参数怎么注释了呢,如果某些参数是保存返回值的话可以试试定义成 String * 255 这种类型的,比如dim byMsgID as string*255

解决方案 »

  1.   

    谢谢Sun_Jianhua(铁拳)的回复,但问题未解决。
    SubmitAExEx的函数原型是:
    int WINAPI SubmitAExEx(unsigned char OrgTON, unsigned char OrgNPI, LPCSTR OrgAddr,
        unsigned char DestTON, unsigned char DestNPI, LPCSTR DestAddr, 
        unsigned char PRI, unsigned char RD, unsigned char RP, 
        unsigned char SRR, unsigned char MR, unsigned char DCS, 
        unsigned char PID, LPCSTR Schedule, LPCSTR Expire, 
        unsigned long Default_ID, unsigned char UDHI, unsigned long UDLen,
        LPCSTR UserData, LPCSTR ServiceSubType, 
        unsigned char* byMsgID, unsigned char byPKTotal, 
        unsigned char byPKNumber, unsigned char byMsglevel, 
        unsigned char byFeeUserType,LPCSTR sSPID, LPCSTR sFeeType, 
        LPCSTR sFeeAddr, LPCSTR sFeeCode,unsigned char byUserNum, 
        LPCSTR sDestAddrs,unsigned long* SM_ID, unsigned char* FCS)按理说,byMsgID参数应为Byte类型
    但华为的API说明中却这样写道:
       “byMsgID......由SP侧短信网关本身产生:
        这里得到的MsgID已经将64位(8字节)的整数转化为21字节的字符串。
        (1)时间(从月精确到分) 0――9位
        (2)SMC(短讯中心)号码 或网关ID号 。10――14位
        (3)序列号  15――19位
        各分段如不能填满,左补零,右对齐”
    如果是21字节的字符串,Byte类型显然不能胜任。
    试过了,这个参数就算不注释也一样出错。
      

  2.   

    21字节的字符串,用byte数组也可以搞定再说声明
    Declare Function SubmitAExEx Lib "SMEIDLL.dll" (ByVal OrgTON As Byte, _
        ByVal OrgNPI As Byte, ByVal OrgAddr As String, _
        ByVal DestTON As Byte, ByVal DestNPI As Byte, ByVal DestAddr As String, _
        ByVal PRI As Byte, ByVal RD As Byte, ByVal RP As Byte, _
        ByVal SRR As Byte, ByVal MR As Byte, ByVal DCS As Byte, _
        ByVal PID As Byte, ByVal Schedule As String, ByVal Expire As String, _
        ByVal default_id As Long, ByVal UDHI As Byte, ByVal UDLen As Long, _
        ByVal UserData As String, ByVal ServiceSubType As String, _
    /* 如果byMsgID是返回值,一定要写Byval byMsgID As String, VB处理String特别,ByRef是String的对象的地址而不是String内容的首地址,所以用ByVal
        ByVal byMsgID As String, ByVal byPKTotal As Byte, _
     */
        ByVal byPKNumber As Byte, ByVal byMsglevel As Byte, _
        ByVal byFeeUserType As Byte, ByVal sSPID As String, ByVal sFeeType As String, _
        ByVal sFeeAddr As String, ByVal sFeeCode As String, ByVal byUserNum As Byte, _
        ByVal sDestAddrs As String, ByRef SM_ID As Long, ByRef FCS As Byte) As Long记住,如果c原型是char* 一定要用Byval string
      

  3.   

    一言中的,谢谢lazygod(Use any item) 了。请接分