修正delphi编写的ocx控件中的DAX error问题

来源:互联网 发布:js new 对象 编辑:程序博客网 时间:2024/06/11 19:57

最近用Delphi7编写了两个IE插件,在同一IE页面打开含这两个插件提示DAX错误。在网上找到一篇文章,原来是Delphi编写插件在Win2k和XP下有这个问题,需要修改Vcl目录下AxCtrls.pas文件里面的ParkingWindow函数内容,编译后将AxCtrls.dcu拷贝到Lib目录下,重新编译插件即可。

  1. function ParkingWindow: HWND;
  2. var
  3.   TempClass: TWndClass;
  4. {$IFNDEF PARKINGWINDOWFIX}
  5.   ParkingName : String;
  6. {$ENDIF}
  7. begin
  8.   Result := xParkingWindow;
  9.   if Result <> 0 then Exit;
  10.   FillChar(TempClass, sizeof(TempClass), 0);
  11. {$IFNDEF PARKINGWINDOWFIX}
  12.   // fix Dax error : accessviolation (win2k, win xp)
  13.   ParkingName := 'DAXParkingWindow_' + Format('%p', [@ParkingWindowProc]);
  14.   if not GetClassInfo(HInstance, PChar(ParkingName), TempClass) then // fix Dax error : accessviolation (win2k, win xp)
  15. {$ELSE}
  16.   if not GetClassInfo(HInstance, 'DAXParkingWindow', TempClass) then
  17. {$ENDIF}
  18.   begin
  19.     TempClass.hInstance := HInstance;
  20.     TempClass.lpfnWndProc := @ParkingWindowProc;
  21. {$IFNDEF PARKINGWINDOWFIX}
  22.     TempClass.lpszClassName := PChar(ParkingName); // fix Dax error : accessviolation (win2k, win xp)
  23. {$ELSE}
  24.     TempClass.lpszClassName := 'DAXParkingWindow';
  25. {$ENDIF}    
  26.     if Windows.RegisterClass(TempClass) = 0 then
  27.       raise EOutOfResources.Create(SWindowClass);
  28.   end;
  29.   xParkingWindow := CreateWindowEx(WS_EX_TOOLWINDOW, TempClass.lpszClassName, nil,
  30.     WS_POPUP, GetSystemMetrics(SM_CXSCREEN) div 2,
  31.     GetSystemMetrics(SM_CYSCREEN) div 20000, HInstance, nil);
  32.   SetWindowPos(xParkingWindow, 00000, SWP_NOACTIVATE or SWP_NOREDRAW
  33.     or SWP_NOZORDER or SWP_SHOWWINDOW);
  34.   Result := xParkingWindow;
  35. end;

 

原创粉丝点击