这样的VC函数怎么样转化为DELPHI的函数,特附上VC的相关代码!急急!300分,搞定之后可多加200分。 (300分)

  • 主题发起人 fartripLiao
  • 开始时间
to张无忌
var
ret:BOOL;
rcLogic,rcDest:TRect;
PHeader,CardPos:pCAP_WND_P0S;
这样调用
CardPos:=AllocMem(SizeOf(CAP_WND_POS)*3);
PHeader:=CardPos;
try
for i:=1 to 3 do
begin
CardPos^.// 设置他的值
Inc(CardPos,SizeOf(CAP_WND_POS));
end;
ret = MapLogicScreenToUserScreen(rcLogic,rcDest,PHeader,4);
finally
freemem(CardPos);
end;

freemem(CardPos); //当执行到这一句会出错
 
freemem(PHeader);
 
1.如老张说的,必须加stdcall
2.if LoadFunType(@ARect, @BRect, @ACardPos, dwCardNum) then
ShowMessage('调用成功!')
else
ShowMessage('调用失败!');
如果返回是BOOL可以为:
if Boolean(LoadFunType(@ARect, @BRect, @ACardPos, dwCardNum)) then
ShowMessage('调用成功!')
else
ShowMessage('调用失败!');即可。

3.function MapLogicScreenToUserScreen({var不要} rcLogic,rcUser:TRect;
pCardPos:pCAP_WND_POS;
dwCardCount:DWORD):BOOL;stdcall;
因为它传递的其实是实参,而非RECT **rcLogic和RECT **rcUser

告辞!后会有期!



 
To fartripLiao,按照这个定义:
function MapLogicScreenToUserScreen(rcLogic, rcUser: PRect;
pCardPos: PCAP_WND_POS, dwCardCount: DWORD);BOOL;stdcall

这样用就可以了,注意我用的参数类型!
var
ARect, BRect: TRect;
CardPos: CAP_WND_P0S; //没必要用指针(PCAP_WND_POS)
begin
Result := MapLogicScreenToUserScreen(@ARect, @BRect, @CardPos, 4);
end;
 
顶部