我必须在从ocx控件调用的MFC对话框中加载WPF用户控件。为此,我创建了一个MFC Regular Dll(启用了clr选项的混合模式常规dll),我在其中创建了一个Dialog,它使用HWndSource托管wpf用户控件。此导出的对话框被放置为从ocx调用的MFC对话框上方的子对话框。 Ny中间对话框使用C ++ / Cli代码。
当关闭主MFC对话框时,我正在删除在堆上创建的中间对话框的ptr引用。但是在我看到连续的内存泄漏或增长之后。 在对话框的析构函数中,我在HWndSource和wpf用户控件上调用delete,以便调用它的dispose。
但是我看到之后连续泄漏了。
这方面的任何帮助都会有所帮助。
答案 0 :(得分: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 enabled dll的导出方法时,我看到应用程序正在关闭。我正在启用非clr的主应用程序中启用clr的dll的静态链接