C语言做的动态链接库(Trsbp.dll),通过调用相应的函数完成c/s间的数据交换.
内含函数:int  TRSbp_cmd(TRS_CMD *trs_cmd,TRS_RESULT *trs_result);
功能简介:执行不同的命令,实现数据上传或下传
主要参数:trs_cmd──命令结构体,trs_result──结果结构体。
返回值:1--成功,0-失败命令结构体TRS_CMD
(1)定义
typedef struct trs_cmd
{
char CmdId;
char CmdLen[4+1];
char *CmdBuf;
}TRS_CMD;
(2)说明
参数 含义          说明
CmdId 命令ID号
CmdLen 命令字节数 字符串表示的4位整形数,不足4位,左侧加‘0’。例如:字节数为8,表示为‘0008’
CmdBuf 命令内容         具体内容根据不同命令格式不一,每个参数之间以‘\t’作为分割符。
结果结构体TRS_RESULT定义
typedef struct trs_result
{
char Status;
char Rows[4+1];
char Cols[4+1];
char ResultLen[8+1];
char *ResultBuf;
}TRS_RESULT;
(2)说明
参数 含义         说明
Status 结果状态        ‘1’表示成功,结果内容中为返回的实际结果。‘0’执行命令过程中有错误发生,结果内容中为返回的错误信息描述。
Rows 结果行数          字符串表示的4位整形数,不足4位,左侧加‘0’。
Cols 结果字段数 字符串表示的4位整形数,不足4位,左侧加‘0’。
ResultLen 结果字节数 仅为结果内容的字节数,不足8位,左侧加‘0’。
ResultBuf 结果内容        返回数据每条记录之间用‘\n’分割,字段之间用‘\t’分割。
请问:用Delphi调用dll文件时,CmdBuf 命令内容  怎么输入呀?
为什么我这样输入的时候运行总是报错呀:
    pcmd.Cmdid := '4';
    pcmd.cmdlen := '0013';
    pcmd.Cmdbuf := '123'+#9+'上午'+#9+'下午';
而当命令ID号为1,命令字节数为0,命令内容为空时:
    pcmd.Cmdid := '1';
    pcmd.cmdlen := '0000';
    pcmd.Cmdbuf := '';
却能够正确运行啊?!

解决方案 »

  1.   

    可能是
    char *ResultBuf
    你的:
    pcmd.Cmdbuf := '123'+#9+'上午'+#9+'下午';
    在分配内存之前就强行符值的问题你的TRS_RESULT在D中怎么定义的?
      

  2.   

    我是这样定义的: prs_Cmd = ^TRS_CMD;
        TRS_CMD = record
        Cmdid : Char;
        cmdlen: array[0..3] of char;
        Cmdbuf: array[0..200] of Char;
      end;
      prs_result = ^Trs_result;
      Trs_result = record
        status : Char;
        rows   : array[0..4] of Char;
        cols   : array[0..4] of char;
        ResultLen: array[0..8] of char;
        resultBuf: PChar;
      end;
      

  3.   

    这样定义试试
    prs_Cmd = ^TRS_CMD;
        TRS_CMD = record
        Cmdid : Char;
        cmdlen: array[0..3] of char;
        Cmdbuf: pChar;
      end;
      prs_result = ^Trs_result;
      Trs_result = record
        status : Char;
        rows   : array[0..4] of Char;
        cols   : array[0..4] of char;
        ResultLen: array[0..8] of char;
        resultBuf: PChar;
      end;
    var
      Cmdbuf:array[0..200] of char;
      resultBuf:array[0..200] of char;声明变量rs_Cmd,rs_result
    rs_cmd.Cmdbuf:=@CmdBuf
    rs_result.ResultBuf:=@ResultBuf    pcmd.Cmdid := '4';
        pcmd.cmdlen := '0013';
        StrCpy(pcmd.Cmdbuf , '123'+#9+'上午'+#9+'下午');