ОБНОВЛЕНИЕ: это клиент .NET, выполняющий вызов обычной библиотеки DLL. У меня также есть другая библиотека DLL расширения, которая экспортирует некоторый класс и используется в обычной библиотеке DLL.
У меня есть сторонняя DLL, которая принимает WindowHandle и пользовательское сообщение в качестве параметра и начинает отправлять сообщения в переданное окно, но я не вижу сообщений, приходящих в мое окно. Ниже приведен формат вызова API:
StartMessaging(<WindowHandle>,WM_MESSAGE_API);
Мне нужна была обычная MFC Regular DLL, которая создаст скрытое окно CFrameWnd только для получения сообщений.
Я также использую AFX_MANAGE_STATE () во всех точках входа в DLL.
Код конструктора в моем производном классе CFrameWnd:
Создать (NULL, "MyWindow");
hWndFrame = this-> m_hWnd;
Карты сообщений:
LRESULT CMyDerivedWnd::OnMsgApi( WPARAM wParam, LPARAM lParam )
{
OutputDebugString("OnMsgApi");
return (LRESULT)0;
}
Мой основной класс, где вызывается StartMessaging:
В конструкторе я создаю экземпляр объекта CFrameWnd:
myDerivedWnd = new CMyDerivedWnd (this);
и затем InitiateMessaging вызывается:
void CMain::InitiateMessaging()
{
TCHAR szBuf[80];
::GetWindowText(myDerivedWnd->m_hWnd,szBuf,80);
OutputDebugString((LPSTR)(LPCTSTR)szBuf); //This displays MYWINDOW
StartMessaging(myDerivedWnd->m_hWnd,WM_MESSAGE_API);
}
Моя функция GetWindowText возвращает правильное имя окна, но я не могу перехватить сообщение WM_MESSAGE_API в этом классе.
Я также пытался использовать расширение DLL, но тот же результат.