2010-06-02 5 views
0

ocx 컨트롤에서 호출되는 MFC 대화 상자에서 WPF 사용자 정의 컨트롤을로드해야합니다. 이를 위해 MFC Regular Dll (clr 옵션을 사용할 수있는 혼합 모드 일반 dll)을 만들었습니다.이 HWndSource를 사용하여 wpf 사용자 컨트롤을 호스팅하는 대화 상자를 만들었습니다. 이 내 보낸 대화 상자는 ocx에서 호출되는 MFC 대화 상자 위의 자식 대화 상자로 배치됩니다. Ny 중간 대화 상자는 C++/Cli 코드를 사용합니다.WpfHWndSource를 사용하는 동안 연속 메모리 누수가 발생했습니다.

주 MFC 대화 상자가 닫힐 때 힙에 작성된 중간 대화 상자의 ptr 참조가 삭제됩니다. 그러나 계속 메모리 누수 또는 증가가 계속 된 후에도 거기에서 참조를 삭제합니다. 대화 상자의 소멸자에서 HWndSource 및 wpf 사용자 정의 컨트롤에서 delete를 호출하여 해당 dispose를 호출해야합니다.

하지만 계속해서 누수가 발생합니다.

이와 관련하여 도움이 될 것입니다.

+0

"HWndSource와 wpf 사용자 컨트롤에서 delete를 호출하여 dispose를 호출해야합니다." 응? 1. HWndSource 및 WPF 컨트롤은 관리되는 개체이므로 호출 할 "삭제"가 없습니다. 2. Dispose는 완전히 선택 사항입니다 (메모리를 잊어 버릴 수는 없습니다). 실제로 한 일과 예상했던 일을 분명하게 설명하십시오. –

답변

0

HWndSource를 사용할 때 연속 누수가 4kb 인 Google에서 몇 가지 문제가 표시 될 수 있습니다. 내 문제는 그게 사실 인 것 같다.

WPF Memory Leak on XP (CMilChannel, HWND)

나는 나의 실제 개발 응용 프로그램과 비슷한에있는 샘플 MFC Dilaog 응용 프로그램에서이 문제를 시뮬레이션했다. 응용 프로그램의 생성자에서는 먼저 더미 HWndSource 객체를 만들었으며 메모리 누수가 개선 된 것 같습니다.

HWndSource를 생성하는 my clr enabled 중간 mfc 일반 dll에 다른 내 보낸 함수를 추가했습니다. 내 응용 프로그램의 생성자에서이 내 보낸 함수를 호출합니다. 내 응용 프로그램의 생성자에서

void CConnectionPanelExport::CreateHwndSource() 
{ 
    HWND hwnd = (HWND)(gcnew System::Windows::Interop::HwndSource(*gcnew 
     System::Windows::Interop::HwndSourceParameters("MyApplication")))->Handle.ToPointer(); 
    CWnd *temp= CWnd::FromHandle(hwnd); 
    temp->ShowWindow(SW_HIDE); 
} 

, 나는

CConnectionPanelExport connectionPanelExport; 
connectionPanelExport.CreateHwndSource(); 

이 제어 응용 프로그램의 메모리를 유지하는 것이라고하지만 정말 내가 probelm을 이해할 수 없었다.

실제 개발 응용 프로그램에서이 구현을 시도했지만 응용 프로그램이/clr enabled dll의 내 보낸 메서드를 호출 할 때 응용 프로그램이 닫히는 것을 확인할 수 있습니다. 나는 clr 가능하게 된 DLL의 정적 링크를 non-clr enabled 메인 어플리케이션에서 만들었습니다.

+1

정보를 추가하려면 '답변'을 게시하는 대신 질문 아래에있는 수정 버튼을 사용해야합니다. –

관련 문제