VC的函数接口:
int UnPackage(const unsigned char *pData, int nDataSize,
unsigned short *pObjID, unsigned char *pErrorCode, unsigned char *pObjSize, unsigned char *pObjBuffer, unsigned char nObjBufferSize)
Delphi中我编写的接口:
function UnPackage(pData: PByteArray; nDataSize: Integer;
  var pObjID: Word; var pErrorCode: Byte; var pObjSize: Byte; pObjBuffer: PByteArray;
  nObjBufferSize: Byte): Integer; stdcall; external 'Test.dll';实际调用过程中,总是出现错误,查不出什么原因,请各位大虾指教.

解决方案 »

  1.   

    function UnPackage(const pData: PByte; 
                          nDataSize: Integer; 
                          var pObjID: Word; 
                          var pErrorCode: Byte; 
                          var pObjSize: Byte; 
                          var pObjBuffer: Byte; 
                          nObjBufferSize: Byte): Integer; cdecl;
      

  2.   

    不好意思,如果用
    function UnPackage(const pData: PByte; 
                          nDataSize: Integer; 
                          var pObjID: Word; 
                          var pErrorCode: Byte; 
                          var pObjSize: Byte; 
                          var pObjBuffer: Byte; 
                          nObjBufferSize: Byte): Integer; cdecl;
    该方式似乎有点问题.
    还有就是做为指针,没什么改变不改变的,加不加const一样的.
    而且这样定义,我传入的数据就只能是一个Byte了.我需要的传入一串数据.
    nDataSize 和 nObjBufferSize 就是指定数据区域长度的,使用前使用
    GetMem开辟空间.
      

  3.   

    这说明你对Delphi的数组指针没有领会
    指向第一个元素的指针,才是数组的指针
    对于静态数组,@a和@a[0]没有区别
    但是对于动态数组,必须得传@a[0]var
      a : array of Byte;
      nDataSize : Integer
    begin
      SetLength(a,nDataSize);  UnPackage(@a[0],nDataSize......);
      

  4.   

    pErrorCode,pObjSize,pObjBuffer这三个参数原来是指向char的指针,你的d函数怎么成了byte了,也定义成pbytearray。其他的我看不出什么问题。传递pbytearray是没有问题的,因为pbytearray是d自定义的一个开放数组,可以作为参数直接传递。
      

  5.   

    http://www.drbob42.com/delphi/headconv.htm
      

  6.   

    1、unsigned char对应的是Delphi里的Byte
    2、Delphi的var参数,传递的是指针,因此var byte  == unsigned char* 
    3、
      PByteArray = ^TByteArray;
      TByteArray = array[0..32767] of Byte;PByteArray是静态数组的指针,与@TByteArray[0]是同一个东西对于动态数组,@TByteDynArray和@TByteDynArray[0]不是同一个东西4、对于C\C++,数组的指针是指向第一个元素的指针,
    如果Delphi用的是动态数组的话,也得传递指向第一个元素的指针5、Delphi里开放数组参数和动态数组语法上很像,但指的不是一个东西
    开放数组参数实际上还是静态数组NoteThe syntax of open array parameters resembles that of dynamic array types, but they do not mean the same thing.