该API在PowerBuilder中可以成功执行,如下所示Function long ICC_tsi_api(ulong fd,char  len, char comm[200],ref char lenr, ref char  resp[200]) library "crwicc.dll"然后调用 
long fd,li_result;
char ic_resp[200]
string ls_portchar lc_command[100]
char lc_command_lenlc_command[1]  = char(0)
lc_command[2]  = char(164)
lc_command[3]  = char(0) 
lc_command[4]  = char(0)
lc_command[5]  = char(2) 
lc_command[6]  = char(0) 
lc_command[7]  = char(22) 
lc_command[8]  = char(0) 
lc_command_len = char(8)
messageno=icc_tsi_api(ff,lc_command_len,lc_command,lc_command_len,ic_resp)我在VB中定义如下
Declare Function ICC_tsi_api Lib "CRWICC.dll" (ByVal fd As Long, ByVal s_len As Byte, ByRef comm As String, ByRef lenr As Byte, ByRef resp As String) As Integer
    ic_resp = Space(200)
    lc_command =space(200)
    lenr = 8
    lenc = 8
    lc_command = Chr(0) + Chr(164) + Chr(0) + Chr(0) + Chr(2) + Chr(0) + Chr(22) + Chr(0)    messageno=ICC_tsi_api(ff, lenc, lc_command, lenr, ic_resp)
执行后却无法得到正确结果,我猜大概是传入参数类型有问题,望大家指教

解决方案 »

  1.   

    改一下:Declare Function ICC_tsi_api Lib "CRWICC.dll" (ByVal fd As Long, ByVal s_len As Byte, ByVal comm As String, ByRef lenr As Byte, ByVal resp As String) As Integer
      

  2.   

    老大,应该是As Long不是As Integer吧?呵呵
      

  3.   

    不知道你的API的调用约定
    一般情况楼上给出的代码就可行,不行的话就手动“凑”出传入参数的长度吧,尤其是那个char comm[200]和char resp[200],最好生成一个同样满足长度条件的数组参数传入
    尤其要注意的是不能使用lc_command = Chr(0) + Chr(164) + Chr(0) + Chr(0) + Chr(2) + Chr(0) + Chr(22) + Chr(0)这样的代码,会覆盖原来lc_command的长度