Delphi ActiveX的DAX Error之终极解决方法
(2016-04-14 12:57:17)分类: 程序乐土-DELPHI |
一般对DAX Error的解释是:Delphi 的 ActiveX一个进程只有一个 ParkingWindow,需要把VCL里的axctrls.pas 的ParkingWindow函数进行修改:
function ParkingWindow: HWND;
var
TempClass: TWndClass;
ParkingName : String;
begin
Result := xParkingWindow;
if Result <> 0 then Exit;
// fix
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;