fix DAX error(解决delphi编写的ocx控件中的DAX error问题)

该日志由 samool 发表于 2007-12-25 6:05 PM



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;

 傻猫网络日志标签:    ocx, dax  tiffany jewelry  
网摘: Yahoo Baidu Google Bolaa 365Key Yesky Wozhai POCO ViVi YouNote Hexun Del.icio.us Yeeyoo igooi I2Key Cn3 Bytemen Furl Blinklist Blogmarks Technorati 分享到饭否
发表评论:( 来了就留个脚印吧!你的参与是我最大的动力!)

    

(单击图片换张图片)