C写的Dll,在delphi里面调用出错,帮忙看一下
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编写的函数,参数为数组类型的话,这样调用是成功的。
问题点数:20、回复次数:7Top
1 楼Kshape_zh(伟大的大伟//[给我个支点、我就可以翘起整个地球仪!])回复于 2005-01-28 13:10:51 得分 3
是否是缓冲区没有释放?Top
2 楼luxuewei5214(小卢)(以下内容仅供参考)回复于 2005-01-28 14:30:07 得分 3
const buf: array of byte;可能是数据类型不对吧Top
3 楼lemon_wei(研究BT,做好P2P)回复于 2005-01-28 15:21:18 得分 0
to: Kshape_zh(伟大的大伟//[给我个支点、我就可以翘起整个地球仪!]) ( ) 信誉:100
是否是缓冲区没有释放
--------------------------
不存在这个问题,我在VC中调用成功后,才在delphi中调用,而且调用方法一模一样。
to : luxuewei5214(小卢) ( ) 信誉:100
const buf: array of byte;可能是数据类型不对吧
--------------------------------------------------
类型是一样的,delphi : byte 0..255
vc : unsigned char 0..255
Top
4 楼free007(魔蝎)回复于 2005-01-28 15:52:20 得分 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";
Top
5 楼djmdjmdjm(狄惊梦)回复于 2005-01-28 15:56:43 得分 4
这样,定义一个类型type sbuf=array of byte(我感觉这里byte改成char为好)
function CalcCRC(buf:sbuf; bufLen:integer):boolean;external "xxx.dll";
Top
6 楼xinshiji(自由我有)回复于 2005-01-28 16:04:41 得分 4
const unsigned char buf[],在delphi中你用pchar试试
function CalcCRC(const buf: pchar;
bufLen:integer):boolean;stdcall;external "xxx.dll";Top
7 楼hhnick(nick)回复于 2005-01-28 16:11:24 得分 3
用array of char, byte在delphi中是一个字节的整形,当然跟char不匹配了,
用pchar的话,最好做内存分配及释放。Top




