- 【Delphi】Embarcaderoオッチャ その30【C++ビルダ】
308 :デフォルトの名無しさん[sage]:2015/03/01(日) 14:56:37.63 ID:T6vkDyur - XE7でリーク問題
class function TEncoding.GetUTF8: TEncoding; var LEncoding: TEncoding; begin if FUTF8Encoding = nil then begin LEncoding := TUTF8Encoding.Create;//ここでリークしてるが解決方法誰か知りませんか if AtomicCmpExchange(Pointer(FUTF8Encoding), Pointer(LEncoding), nil) <> nil then LEncoding.Free; {$IFDEF AUTOREFCOUNT} FUTF8Encoding.__ObjAddRef; {$ENDIF AUTOREFCOUNT} end; Result := FUTF8Encoding; end;
| - 【Delphi】Embarcaderoオッチャ その30【C++ビルダ】
309 :デフォルトの名無しさん[sage]:2015/03/01(日) 15:37:52.82 ID:T6vkDyur - XE7のRegisterClassリソースリーク解決案
destructor TApplication.Destroy; で DestroyWindow(FHandle); end;下に追加 Winapi.Windows.UnregisterClass(WindowClass.lpszClassName, HInstance);//追加 procedure TWinControl.DestroyWindowHandle; で Exclude(FControlState, csDestroyingHandle);下に追加 Winapi.Windows.UnregisterClass(Params.WinClassName, HInstance);//追加 destructor TWinControl.Destroy;で var Instance: TControl;下に Params: TCreateParams;//追加 DestroyWindowHandle; StrPCopy(Params.WinClassName, ClassName); //追加 Winapi.Windows.UnregisterClass(Params.WinClassName, HInstance);//追加 (http://qc.embarcadero.com/wc/qcmain.aspx?d=107204)に掲載あり procedure DeallocateHWnd(Wnd: HWND);で if Instance <> @DefWindowProc then FreeObjectInstance(Instance);この下 if (GetClassInfo(HInstance, UtilWindowClass.lpszClassName, TempClass)) then//追加 Winapi.Windows.UnregisterClass(UtilWindowClass.lpszClassName, HInstance);//追加
| - 【Delphi】Embarcaderoオッチャ その30【C++ビルダ】
310 :デフォルトの名無しさん[sage]:2015/03/01(日) 20:01:18.09 ID:T6vkDyur - XE7のRegisterClassリソースリーク解決案
で destructor TWinControl.Destroy;の改良 var Instance: TControl;この下 Params: TCreateParams;//追加 TempClass: TWndClass;//追加 begin ・・・・・ DestroyWindowHandle;この下に追加 StrPCopy(Params.WinClassName, ClassName); //追加 if (GetClassInfo(HInstance, Params.WinClassName, TempClass)) then//追加 Winapi.Windows.UnregisterClass(Params.WinClassName, HInstance);//追加
|
|