2010-06-02 96 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