2010-06-02 103 views
0

我必須從正在從ocx控件調用的MFC對話框中加載WPF用戶控件。爲此,我創建了一個MFC Regular Dll(啓用了clr選項的混合模式常規dll),我在此創建了一個使用HWndSource託管wpf用戶控件的對話框。這個導出的對話框被放置在從ocx調用的MFC對話框的thr兒童對話框中。 Ny中間對話框使用C++/Cli代碼。使用WpfHWndSource時連續內存泄漏

當主MFC對話框關閉時,我正在刪除在堆上創建的中間對話框的ptr引用。但在那裏我仍然看到連續的內存泄漏或增長。 在對話框的析構函數中,我調用HWndSource和wpf用戶控件上的delete,以便調用它的dispose。

但是我看到之後有持續的泄漏。

在這方面的任何幫助將有所幫助。

+0

「我正在調用HWndSource和wpf用戶控件上的刪除,以便它的dispose應該被調用」。咦? 1. HWndSource和WPF控件是管理對象,因此沒有「刪除」調用。 2. Dispose是完全可選的(你不能通過忘記調用它來泄漏內存)。請說明你實際做了什麼以及你期望發生什麼。 – 2010-06-02 18:54:52

回答

0

在使用HWndSource時,可能會在谷歌中看到一些連續泄漏4kb的問題。我的問題似乎與此相似。

WPF Memory Leak on XP (CMilChannel, HWND)

我有一個樣品MFC Dilaog應用是類似我的實際開發應用在模擬這個問題。在應用程序的構造函數中,我先創建了一個虛擬的HWndSource對象,它似乎顯示內存泄漏的改進。

我已經添加了另一個導出的函數在我的clr啓用中間mfc常規DLL創建HWndSource。我從我的應用程序的構造函數調用此導出的函數。

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(); 

這似乎保持應用程序的內存控制,但我真的無法理解的萬阿英,蔣達清。

我已經試過在我的實際開發應用程序中實現這一點,我看到應用程序正在關閉時,我調用此導出方法的/ clr啓用DLL。我正在一個非clr啓用的主應用程序中啓用clr啓用dll的靜態鏈接

+1

您應該使用您的問題下的編輯按鈕,而不是發佈'答案'來添加信息。 – 2010-06-05 07:59:37