一般对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”这句上,还需要将其注释或去掉,重新编译即可。
本文介绍了一种解决Delphi中DAXError的方法,通过修改VCL的axctrls.pas文件中的ParkingWindow函数来解决进程只有一个ParkingWindow的问题。此外,文章还提到了需要进一步修改代码才能完全解决问题。
1817

被折叠的 条评论
为什么被折叠?



