最近用Delphi7编写了两个IE插件,在同一IE页面打开含这两个插件提示DAX错误。在网上找到一篇文章,原来是Delphi编写插件在Win2k和XP下有这个问题,需要修改Vcl目录下AxCtrls.pas文件里面的ParkingWindow函数内容,编译后将AxCtrls.dcu拷贝到Lib目录下,重新编译插件即可。
- functionParkingWindow:HWND;
- var
- TempClass:TWndClass;
- {$IFNDEFPARKINGWINDOWFIX}
- ParkingName:String;
- {$ENDIF}
- begin
- Result:=xParkingWindow;
- ifResult<>0thenExit;
- FillChar(TempClass,sizeof(TempClass),0);
- {$IFNDEFPARKINGWINDOWFIX}
- //fixDaxerror:accessviolation(win2k,winxp)
- ParkingName:='DAXParkingWindow_'+Format('%p',[@ParkingWindowProc]);
- ifnotGetClassInfo(HInstance,PChar(ParkingName),TempClass)then//fixDaxerror:accessviolation(win2k,winxp)
- {$ELSE}
- ifnotGetClassInfo(HInstance,'DAXParkingWindow',TempClass)then
- {$ENDIF}
- begin
- TempClass.hInstance:=HInstance;
- TempClass.lpfnWndProc:=@ParkingWindowProc;
- {$IFNDEFPARKINGWINDOWFIX}
- TempClass.lpszClassName:=PChar(ParkingName);//fixDaxerror:accessviolation(win2k,winxp)
- {$ELSE}
- TempClass.lpszClassName:='DAXParkingWindow';
- {$ENDIF}
- ifWindows.RegisterClass(TempClass)=0then
- raiseEOutOfResources.Create(SWindowClass);
- end;
- xParkingWindow:=CreateWindowEx(WS_EX_TOOLWINDOW,TempClass.lpszClassName,nil,
- WS_POPUP,GetSystemMetrics(SM_CXSCREEN)div2,
- GetSystemMetrics(SM_CYSCREEN)div2,0,0,0,0,HInstance,nil);
- SetWindowPos(xParkingWindow,0,0,0,0,0,SWP_NOACTIVATEorSWP_NOREDRAW
- orSWP_NOZORDERorSWP_SHOWWINDOW);
- Result:=xParkingWindow;
- end;