C写的Dll,有个输出函数参数是数组类型,是这样的
bool CalcCRC(const unsigned char buf[], int bufLen); 该dll 在VC环境下测试成功。
我在delphi中是这样写的
function CalcCRC(const buf: array of byte; bufLen: integer):boolean; external "xxx.dll";
只声明不调用是没有错误,如果我调用这个函数的话就报内存错误,我是这样调用的:
-----------------------------------------------
var 
  buf: array [0..7] of byte;
  ....
  CalcCRC(buf,8);
------------------------------------------------
不知道是么回事。我试了一下,如果是delphi编写的函数,参数为数组类型的话,这样调用是成功的。

解决方案 »

  1.   

    const buf: array of byte;可能是数据类型不对吧
      

  2.   

    to: Kshape_zh(伟大的大伟//[给我个支点、我就可以翘起整个地球仪!]) ( ) 信誉:100 
        是否是缓冲区没有释放
        --------------------------
        不存在这个问题,我在VC中调用成功后,才在delphi中调用,而且调用方法一模一样。
    to : luxuewei5214(小卢) ( ) 信誉:100 const buf: array of byte;可能是数据类型不对吧
    --------------------------------------------------
    类型是一样的,delphi :  byte             0..255
                  vc     :  unsigned char    0..255
      

  3.   

    function CalcCRC(const buf: array of byte; bufLen: integer):boolean; external "xxx.dll";
    改成下面的试试
    function CalcCRC(const buf: array of byte; bufLen:integer):boolean;stdcall;external "xxx.dll";
      

  4.   

    这样,定义一个类型type sbuf=array of byte(我感觉这里byte改成char为好)
    function CalcCRC(buf:sbuf; bufLen:integer):boolean;external "xxx.dll";
      

  5.   

    const unsigned char buf[],在delphi中你用pchar试试    
    function CalcCRC(const buf: pchar;
    bufLen:integer):boolean;stdcall;external "xxx.dll";
      

  6.   

    用array of char, byte在delphi中是一个字节的整形,当然跟char不匹配了,
    用pchar的话,最好做内存分配及释放。