Delphi ActiveX的DAX Error之终极解决方法

   

  一般对DAX Error的解释是:Delphi 的 ActiveX一个进程只有一个 ParkingWindow,需要把VCL里的axctrls.pas 的ParkingWindow函数进行修改:

function ParkingWindow: HWND;

var

TempClass: TWndClass;

ParkingName : String;

begin

Result := xParkingWindow;

if Result <> 0 then Exit;

// fix Dax error : accessviolation (win2k, win xp)

ParkingName := 'DAXParkingWindow_' + Format('%p', [@ParkingWindowProc]);

FillChar(TempClass, sizeof(TempClass), 0);

if not GetClassInfo(HInstance, PChar(ParkingName), TempClass) then // fix Dax error : accessviolation (win2k, win xp)

begin

TempClass.hInstance := HInstance;

TempClass.lpfnWndProc := @ParkingWindowProc;

TempClass.lpszClassName := PChar(ParkingName); // fix Dax error : accessviolation (win2k, win xp)

if Windows.RegisterClass(TempClass) = 0 then

raise EOutOfResources.Create(SWindowClass);

end;

xParkingWindow := CreateWindowEx(WS_EX_TOOLWINDOW, TempClass.lpszClassName, nil,

WS_POPUP, GetSystemMetrics(SM_CXSCREEN) div 2,

GetSystemMetrics(SM_CYSCREEN) div 2, 0, 0, 0, 0, HInstance, nil);

SetWindowPos(xParkingWindow, 0, 0, 0, 0, 0, SWP_NOACTIVATE or SWP_NOREDRAW

or SWP_NOZORDER or SWP_SHOWWINDOW);

Result := xParkingWindow;

end;

  但是做了以上修改,并没有解决全部问题,仍然会报DAX Error,经过调试和试验发现问题出在“if Result <> 0 then Exit”这句上,还需要将其注释或去掉,重新编译即可。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值