DLL调用问题!关于传入指针数组(100分)

  • 主题发起人 主题发起人 coolsoft
  • 开始时间 开始时间
C

coolsoft

Unregistered / Unconfirmed
GUEST, unregistred user!
各位先进:
我在VC中写了一个DLL,里面有一个函数: int WINAPI func0(BYTE *pBuffer,int w ,int h,POINT *psize[],BYTE *plist[]);
在DELPHI 中声明并调用,function func0(pBuffer:pByte;w,h:integer;psize:array of ppoint;plist:array of PBYTE):integer;stdcall;external 'mydll.dll';
调用时, plist和psize均已初始化,并分配了内存.

结果调用时出现内存访问错误,我跟踪了一下内存地址,发现在VC的DLL中接收的plist的地址是错误的,显示的地址是9,所以当房问plist中的元素是,出现内存越界问题.但是其他参数传递很正常.不知何解.
我想应该不是参数转换的问题,因为两边我都是stdcall.
恳请了解的朋友给个提示.
 
任何东西都要讲个规则。
 
楼上没有什么建设性的话就不要说了,说了也不会给分![:D]
 
八成就是参数转换的问题。
在CPU窗口里头跟进汇编看看吧,看看堆栈中到底哪个值被推到哪儿了。
 
另外,psize:array of ppoint;plist:array of PBYTE 并不等同于 POINT *psize[],BYTE *plist[],你应该贴出调用时的代码看看你参数传的时候是怎么写的。
 
passion:
你好!
procedure Test();
var
plist: array[0..9] of PBYTE;
psize: array[0..9] of PPoint;
i:integer;
begin
for i:=0 to 9 do
begin

psize:=allocmem(sizeof(TPoint));
psize^.x:=0;
psize^.y:=0;
plist:=allocmem(300*100*3);
end;
//pbuffer,w,h都已赋值)
func0(pBuffer,w,h,psize,plist);
//内存释放(略)
......


end;
 
应该上面这些在c++中的定义贴出来就比较说明问题啦?
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
916
SUNSTONE的Delphi笔记
S
后退
顶部