when using Internet Explorer in Wink2, WinXp, ActiveForm or ActiveX control raise

DAX error : access violation at address 000

reason :

delphi's ocx use same parking window procedure.

one ocx must use individual parking window proc.

fix error.

edit delphi VCL source routine in axctrls.pas

and compile axctrls.pas

copy axctrls.dcu to lib directory.

axctrls.pas

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;

最后修改:2009 年 08 月 16 日
建站21年,至今未收到一分打赏,但我还在坚持,等一个有缘人