最近用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;
本文介绍了一种解决Delphi7编写的IE插件在Windows 2000和XP系统中出现DAX错误的方法。通过修改Vcl目录下的AxCtrls.pas文件中的ParkingWindow函数,并替换Lib目录下的AxCtrls.dcu文件,可以避免多个Delphi编写的IE插件在同一页面加载时引发的错误。
770

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



