这问题已困扰小弟很久了,哪位大哥赐教一下 !

解决方案 »

  1.   

    Smallint -32768..32767 signed 16-bit放的下吗?  地址是4个字节,Smallint是两个字节,怎么放?
      

  2.   

    但是我现在的接口函数接受的参数类型就是smallint型的,该怎么转呢?
      

  3.   

    smallint?确定是32位的接口?C++的?最好有原型.
      

  4.   

    对,是C++开发的接口,C++原型:bOperMethod(long lType, short FAR* pData)
    在Delphi下原型:bOperMetho(lType:integer;pData:smallint)
      

  5.   

    在Delphi下原型:bOperMetho(lType:integer;var pData:smallint)
      

  6.   

    short FAR* pData的意思是: pData是一个指向short类型的指针对应Delphi的应该是: bOperMetho(lType:integer;  pData:PSmallint);
      

  7.   

    楼上的Delphi下的原型是加载OCX控件时自动转换过来的,我改不了,我想这个转换不应该会错吧?
      

  8.   

    如果是写成 bOperMetho(lType:integer; var pData:smallint);那么在调用bOperMetho时, 对应pData的应该是一个SmallInt变量。例如:
    var
      AData : array[0..1023] of Smallint;
      BData : Smallint;
    begin
      ......
      bOperMetho(..., AData[0]);
      bOperMetho(..., BData);
    end;应该都和Char数组的内存首地址无关。
      

  9.   

    贴出C++调用该函数的代码:
    char   JidTp[800];   
    strcpy(JidTp,strTemp); 
    bOperMetho(0,   (short*)JidTp); 
      

  10.   

    to jadeluo 
    我需要象类似以C++一样将一字符串传进去,如果照你所说,那我该怎么传呢?
      

  11.   


    procedure bOperMetho(lType:integer;   var pData:smallint); ......var
      JidTp : array[0..799] of Byte;
    begin
      ......
      bOperMetho(0, PSmallInt(@JidTp[0])^);
      ......
    end;
      

  12.   

    这样也行:var
      JidTp : array[0..799] of Char;
    begin
      bOperMetho(0, PSmallint(@JidTp[0])^);
    end;
      

  13.   

    原来这个意思呀,x:array[0..199] of char;
    beginbOperMetho( 0 ,(Psmallint(@x))^ );//早说呢,这样调用
    end;
      

  14.   

    好的,我先试试,很感谢大家,我用Delphi不久,感觉很陌生