创建的ActiveForm在IE中多次使用出现DAX ERROR: Access Violation的问题。
在2k和XP中。这个问题屡次出现,CSDN中对这个问题进行了多次讨论。很多人说在ActiveForm的Close事件中加入action := cafree;
但是ActiveForm没有Close事件:(Borland对此有证明回答:
Fix Delphi ActiveX DAX error : access violation using IE
http://codecentral.borland.com/codecentral/ccweb.exe/listing?id=18656但是,我还是想搞清楚action := cafree;的搞法,呵呵
特别是邀请nhdj(柳柳荷叶清清水)回答,100分相送:)
在2k和XP中。这个问题屡次出现,CSDN中对这个问题进行了多次讨论。很多人说在ActiveForm的Close事件中加入action := cafree;
但是ActiveForm没有Close事件:(Borland对此有证明回答:
Fix Delphi ActiveX DAX error : access violation using IE
http://codecentral.borland.com/codecentral/ccweb.exe/listing?id=18656但是,我还是想搞清楚action := cafree;的搞法,呵呵
特别是邀请nhdj(柳柳荷叶清清水)回答,100分相送:)
解决方案 »
- 如何判断DevExpress的TcxDBRadioGroupItem哪一个被选中?
- 求助!急!
- 我该怎样取打印页数
- 各位大侠,谁知道像QQ那样,点击那个拖盘图标,弹出菜单,菜单左边的竖条是怎么实现的呀?谢谢
- 使用adoquery.post的时候出错?什么原因啊?
- 怎么让查询速度变快一些
- 如何实现往combobox或comboboxEx加入这样一些内容,好烦......
- 谁知道字符型怎么向日期型转换?
- 问一个ado联oracle的怪问题!
- 哪儿有中国式报表打印控件?
- 怎么样用一个按钮当按下时数据库中表的当前记录往前(或往后)移一个位置.
- ClientSocket发送数据的超时重发处理如何实现?多长时间为发送数据超时??先谢了!
没有看到他有FormClose的重载或者事件。 还是没有解决这个问题,nhdj希望你能不吝赐教。谢谢!
或者delphi5开发人员指南中哪一部分有讲,我没找到。
按照http://codecentral.borland.com/codecentral/ccweb.exe/listing?id=18656
上的说法,你的问题解决了吗?
我的怎么不行?
我用的是D7
问题解决了,你编译的.dcu需要放到<Program files>\Borland\Delphi7\Lib下,
但是需要注意,Delphi默认配置,是取\lib\debug下的.dcu,你要把那个也替换一下。我认为Delphi 7不能不改这个明显的bug,可能还是我们的调用方法部队,
所以非常想nhdj把他的方法讲清楚。呵呵,大家一起顶啊,我先顶两个。
我试过了,还是不行。能否借你的.pas和.duc过来用用? 我的mail [email protected]我现在用的是一个空的form,新建的,什么都没加。
运行顺序:先运行一个空的ie,再开两个我的ie,然后关掉第一次运行的我的ie,再运行一次我的ie,就会出错了。
你的问题和我的一样吗?
打不开了,请问大家用什么方法解决的?
1、如果你是用d5 / d6开发的话,请参见http://codecentral.borland.com/codecentral/ccweb.exe/listing?id=18656axctrls.pasfunction 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;
即修改axctrls.pas 文件,并重新编译
2、在D7这样是不能解决问题的,而且Activeform也没有OnClose事件!但这样的问题一般都是出现在装了第三方IE Addin的机器上,只要你将 IE的 工具->选项->高级->浏览 里的"启用第三方扩展"勾 uncheck就可以了。
反观种种现象,发现:如果是PackingWindow所造成的DAX Error,由于其出错原理,出错不会“百发百中”,但是多试几次就会出现。Borland论坛的问题应该可以奏效。若如果一个ActiveForm控件,在某些人的机器上,总是出现Dax Error而在其他的机器上总是不,很有可能不是PackingWindow的错。这时候,建议大家怀疑IE的插件。插件与你的Ax兼容性可能存在问题(我估计这一点atl的控件和dax控件一样)。诸位可以按照HorkyTao的方式关闭插件重试目前发现兼容性问题的插件有:
1. MSN Helper (Faint, MS的东西)没问题的插件有:
1. Google ToolbarMSN Helper屡试不爽,建议有兴趣的兄弟找找兼容性问题的原因。结贴:分全给HorkyTao, 感谢他的深入研究。