最近用Delphi7编写了两个IE插件,在同一IE页面打开含这两个插件提示DAX错误。在网上找到一篇文章,原来是Delphi编写插件在Win2k和XP下有这个问题,需要修改Vcl目录下AxCtrls.pas文件里面的ParkingWindow函数内容,编译后将AxCtrls.dcu拷贝到Lib目录下,重新编译插件即可。
- function ParkingWindow: HWND;
- var
- TempClass: TWndClass;
- {$IFNDEF PARKINGWINDOWFIX}
- ParkingName : String;
- {$ENDIF}
- begin
- Result := xParkingWindow;
- if Result <> 0 then Exit;
- FillChar(TempClass, sizeof(TempClass), 0);
- {$IFNDEF PARKINGWINDOWFIX}
- // fix Dax error : accessviolation (win2k, win xp)
- ParkingName := 'DAXParkingWindow_' + Format('%p', [@ParkingWindowProc]);
- if not GetClassInfo(HInstance, PChar(ParkingName), TempClass) then // fix Dax error : accessviolation (win2k, win xp)
- {$ELSE}
- if not GetClassInfo(HInstance, 'DAXParkingWindow', TempClass) then
- {$ENDIF}
- begin
- TempClass.hInstance := HInstance;
- TempClass.lpfnWndProc := @ParkingWindowProc;
- {$IFNDEF PARKINGWINDOWFIX}
- TempClass.lpszClassName := PChar(ParkingName); // fix Dax error : accessviolation (win2k, win xp)
- {$ELSE}
- TempClass.lpszClassName := 'DAXParkingWindow';
- {$ENDIF}
- 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;