CnLangUtils.pas
function GetLocaleDataW(ID: LCID; out Flag: DWORD): string;
//加一个 out 不然这里内存有异常,
//其实我也不知道为什么要加out ,兴好昨晚认真看了
stanleyxu2005 的贴子
http://bbs.cnpack.org/viewthread.php?tid=1712&extra=page%3D1还有点记得
//刚好今天用BoundsChecker测cw,这里出现内存异常,于是就想到昨天的贴子,果然,加了out之后就没有了异常了,
stanleyxu2005 大虾一个
function GetLocaleDataA(ID: LCID; out Flag: DWORD): string;
//同上加一个 out
CnWizClasses.pas
// if FIconHandle <> 0 then //加判断也没有用
// DestroyIcon(FIconHandle); //不要这个,IDE自动释放FIconHandle,所以加了DestroyIcon反而找不到地址
上面的改动之前,D11启动后,什么也不动,总内存使用是0.9-1G,改完之后是 0.8G左右,足足快差200M
接贴
CnAlignSizeWizard.pas 内
新建窗体时,BoundsChecker会报地址错误,由是多加以下判断,改完之后正常了
function TCnAlignSizeWizard.UpdateNonVisualComponent(
FormEditor: IOTAFormEditor): Boolean;
var
Component: IOTAComponent;
aWinControl:TWinControl;
aPointer: Pointer;
procedure DoHideNonvisualComponent(WinControl: TWinControl);
var
H: HWND;
aHandle:HWND;
begin
aHandle:=WinControl.Handle;
if aHandle<>0 then //多加判断,有异常
begin
H := GetWindow(aHandle, GW_CHILD);
if H<>0 then //判断
begin
H := GetWindow(H, GW_HWNDLAST);
while H <> 0 do
begin
if HWndIsNonvisualComponent(H) then
if Active and HideNonVisual then
ShowWindow(H, SW_HIDE)
else
ShowWindow(H, SW_SHOW);
H := GetWindow(H, GW_HWNDPREV);
end;
end;
end;
end;
begin
Result := False;
if Assigned(FormEditor) then
begin
Component := FormEditor.GetRootComponent;
if Assigned(Component) and Assigned(Component.GetComponentHandle) and
(TObject(Component.GetComponentHandle) is TWinControl) then
begin
aPointer:=Component.GetComponentHandle;
if aPointer<>nil then //判断
begin
aWinControl:=TWinControl(aPointer);
if Assigned(aWinControl) then //判断
begin
DoHideNonvisualComponent(aWinControl);
Result := True;
end;
end;
end;
end;
end;
经过上面一系列的改动, 使用到现在,cw很正常了,BoundsChecker也没有报错
[
本帖最后由 niaoge 于 2007-8-13 14:07 编辑 ]