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';实际调用过程中,总是出现错误,查不出什么原因,请各位大虾指教.
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';实际调用过程中,总是出现错误,查不出什么原因,请各位大虾指教.
nDataSize: Integer;
var pObjID: Word;
var pErrorCode: Byte;
var pObjSize: Byte;
var pObjBuffer: Byte;
nObjBufferSize: Byte): Integer; cdecl;
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开辟空间.
指向第一个元素的指针,才是数组的指针
对于静态数组,@a和@a[0]没有区别
但是对于动态数组,必须得传@a[0]var
a : array of Byte;
nDataSize : Integer
begin
SetLength(a,nDataSize); UnPackage(@a[0],nDataSize......);
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.