У меня проблема с памятью, вызванная HBITMAP внутри структуры, отправляемой из обратного вызова PostMessage
.
.
У меня есть обратный вызов c ++, который отправляет структуру в c # с помощью PostMessage.Это выглядит так:
HRESULT CALLBACK MyCallback(void* ref, HRESULT hr, LPCWSTR pszMessage) {
MyStruct st;
System::String^ serial = gcnew System::String(pszMessage);
serial = serial->Substring(0, serial->LastIndexOf("\\"));
serial = serial->Substring(serial->LastIndexOf("\\") + 1);
st.serial = StringToInt(serial);
HBITMAP send = updatePreview(pszMessage);
IntPtr ptr=(IntPtr) send;
st.imagen = ptr;
PostMessage(w, WM_UPDATE_PREVIEW, IMAGE_UPDATE, (LPARAM)&st);
}
Это моя структура:
struct MyStruct
{
IntPtr imagen;
Int32 serial;
};
Я получаю это сообщение в своем коде c # в моем переопределении WndProc:
protected override void WndProc(ref Message m)
{
if (m.Msg == AePhocus.AePhocusManager.WM_UPDATE_PREVIEW)
{
PICTURE_STRUCT imageinfo = new PICTURE_STRUCT();
Marshal.PtrToStructure(m.LParam, imageinfo);
....
....
}
}
Этот метод обновляет мои предварительные просмотры и работает нормально, но проблема в том, что я не могу освободить HBITMAP, отправленный с c ++.Если после PostMessage я уничтожу указатель, полученное изображение будет нулевым, но если я не уничтожу его, использование памяти увеличивается с каждым предварительным просмотром.
Может кто-нибудь помочь мне с этой проблемой, пожалуйста?Ты все !!