메모리가 누수되는 이벤트 지원이있는 자동화 개체가 있습니다. 생성 된 소스와 함께 제공되는 FConnectionPoints는 절대로 해제되지 않습니다. 소멸자에 수동으로 FConnectionPoints.Free를 추가하면 누설이 사라집니다.자동화 개체 누수 메모리 (TConnectionPoints)
저는 Delphi 7에서 FastMM BorlandMM.dll과 FastMM_Fulldebugmode.dll을 사용하고 있습니다.
단계 재현 :
- 는
- 새로운 자동화 개체 추가 새 ActiveX 라이브러리 프로젝트 시작 : 이름 = TestObject를; "이벤트 지원 코드 생성"을 확인하십시오.
- TypeLibrary를 열고 ITestObject에 메서드를 추가하고 ITestObjectEvents에 이벤트를 추가하십시오.
- 새로 고침, 코드가 생성됩니다.
- 는
- 저장, 컴파일하고 등록하여 .DPR 파일의 첫 번째 단위로 반드시 ShareMem 추가하기이 ActiveX 서버 (실행 메뉴)
- 시작 새로운 응용 프로그램 프로젝트 당신의 .DPR의 첫 번째 단위로 반드시 ShareMem을 넣어
- 가져 오기 형식 라이브러리 장치를 파일 : 당신은 그냥 6 단계에서 만든 DLL에서 장치를 만들고, FormCreate에서
- 을 "구성 요소 래퍼를 생성"체크 추가 다음 코드 :
코드 :
var
lTest: TTestObject;
begin
lTest := TTestObject.Create(nil);
try
lTest.ConnectKind := ckNewInstance;
lTest.Connect;
lTest.Disconnect;
finally
lTest.Free;
end;
end;
지금 실행, 컴파일하고이 응용 프로그램을 닫습니다. 기억 상실이보고됩니다.
질문 :
, 나는가 someting 잘못 델파이 코드 템플릿의 버그 일을 오전이, 아니면이 (도움이 그것을 언급하지 않는) 자신 무료 FConnectionPoints에 의도?
TConnectionPoints는 인터페이스 된 개체가 아니며 TObject를 상속 한 개체입니다. FConnectionPoints는 IConnectionPointContainer를 구현하는 속성으로 반환됩니다. –