开发ACTIVEX控件遇到的两个(含)以上IE打开包含该控件的网页时出现问题 ( 积分: 20 )

  • 主题发起人 主题发起人 dacsd
  • 开始时间 开始时间
D

dacsd

Unregistered / Unconfirmed
GUEST, unregistred user!
开发ACTIVEX控件遇到的两个(含)以上IE打开包含该控件的网页时出现问题
主要是打开两个或两个以上个包含该控件的网页,当一个网页关闭时,其他包含该控件的网页刷新或者其他操作时就会出现问题,感觉是当关闭一个网页时对该ACTIVEX进行了释放,造成其他包含该控件的网页错误,在该控件中有ClientDataSet和DBGRID控件,请问该如何解决,谢谢!
 
在这里如果再解决不了就不知道该如何办了!
 
请高手快来看看!
 
在这里如果再解决不了就不知道该如何办了!
 
Delphi 的 ActiveX一个进程只有一个 ParkingWindow,这就有一个问题,如果在一个程序里,应用了两个ActiveX控件,问题就来了,实际上,在大部分情况下,IE是一个进程,如果打开了多个ActiveX 控件页面,关闭其中一个,然后,再启动一个页面,就会出现 DAX Error。

DAX错误办法

好像有人贴过一个网址,说的解决办法,我把可能的解决办法(说可能因为我也不知道它是不是百分之一百有用)贴一下吧:
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;
 
谢谢fei_1,
您贴得这段代码我已经照着修改过了,还是不行,现在是不出现DAX错误了,但还是会出现重启IE等错误,再次感谢!
 
再次感谢!
 
再次感谢!
 
大侠看看
 
请高手快来看看!
 
对了,我以前也出现过这个问题,是由于用了那个Aspack来压缩生成的OCX控件产生的。我也不明白为什么会这样。我的解决方法是D7安装Update1,然后发布OCX的时候用CAB包,不用其它的控件来优化大小。这样解决之后没有再出现这个问题
 
谢谢fei_1,我去试试。
 
看样子是得不到答案了,等D2007出来吧!
 
后退
顶部