阅读器的实例是C写的,我转成Delphi后,调用SDT_ReadBaseMsg时就会出错,哪位如做过的,请指点一下
C里面的声明
int SDT_ReadBaseMsg ( int iPort, 
                         unsigned char * pucCHMsg, 
                         unsigned int * puiCHMsgLen, 
                         unsigned char * pucPHMsg, 
                         unsigned int * puiPHMsgLen, 
                      int iIfOpen );
我Delphi里是这么写的
function SDT_ReadBaseMsg(iPort:smallint;
                         pucCHMsg:array of char;
                         puiCHMsgLen:array of smallint;
                         pucPHMsg:array of char;
                         puiPHMsgLen:array of smallint;
                         iIfOpen:smallint):smallint;stdcall;external 'sdtapi.dll';

解决方案 »

  1.   

    function SDT_ReadBaseMsg(iPort:Integer;
                             pucCHMsg:PChar;
                             puiCHMsgLen:PInteger;
                             pucPHMsg:PChar;
                             puiPHMsgLen:PInteger;
                             iIfOpen:Integer):Integer;stdcall;external  'sdtapi.dll';
      

  2.   


    function SDT_ReadBaseMsg(iPort:Integer;
                             pucCHMsg:PChar;
                             var puiCHMsgLen:Integer;  //此处定义成变参更方便一些
                             pucPHMsg:PChar;
                             var puiPHMsgLen:Integer;
                             iIfOpen:Integer):Integer;stdcall;external  'sdtapi.dll';
      

  3.   

    我现在调用前加了
          GetMem(pucCHMsg,1024);
          GetMem(pucPHMsg,1024);
          GetMem(uiCHMsgLen,64);
          GetMem(uiPHMsgLen,64);
    错误是没跳出来了,但数据读不到,返回码是1,也就是:端口打开失败/端口尚未打开/端口号不合法
    真奇怪了,前面的函数都没问题
      

  4.   

    我把iIfOpen设成1就读取成功了,但出来是乱码
    我是这么转的
    var mystr:string;
    SetString(mystr,pucCHMsg,Length(pucCHMsg));
    出来的mystr是乱码
    是我转的有问题,还是函数调用右问题?
      

  5.   

    不用SetString直接ShowMessage(pucCHMsg)试试
      

  6.   

    你用的哪个声明?
    function SDT_ReadBaseMsg(iPort:Integer; 
                             pucCHMsg:PChar; 
                             var puiCHMsgLen:Integer;  //此处定义成变参更方便一些 
                             pucPHMsg:PChar; 
                             var puiPHMsgLen:Integer; 
                             iIfOpen:Integer):Integer;stdcall;external   'sdtapi.dll ';
    调用
      //...
    var
      pucCHMsg, pucPHMsg: PChar;
      iPort, puiCHMsgLen, puiPHMsgLen: Integer;
    begin
      //..
      GetMem(pucCHMsg, 1024);
      GetMem(pucPHMsg, 1024);
      
      SDT_ReadBaseMsg(iPort, pucCHMsg, puiChMsgLen, pucPHMsg, puiPHMsgLen, 1 );
      //..
    end;  puiChMsgLen, puiPHMsgLen 声明为整形, 无需申请空间, 再试一下吧
      

  7.   

    是不是SDT_ReadBaseMsg以后还得处理数据啊?
      

  8.   

    没有,只提供了公安部的那个dll 和API函数的说明
      

  9.   

    onhu 
    天河 
    等 级:
     发表于:2007-09-24 12:11:149楼 得分:0 
    一样的,也是乱码 
    应该是函数产生出来右问题 
    ............................
    我想多半是转码问题