2010-12-02 7 views
0

UPDATE: Dies ist ein .NET-Client, der einen Aufruf der regulären DLL aufruft. Ich habe auch eine andere Erweiterung DLL, die einige Klasse exportiert und wird in der regulären DLL verwendet..NET-Client - MFC-Standard-DLL und benutzerdefinierte Nachrichten

Ich habe eine Drittanbieter-DLL, die ein WindowHandle und eine benutzerdefinierte Nachricht als Parameter akzeptiert und beginnt, Nachrichten an das übergebene Fenster zu senden, aber ich sehe keine Nachricht in meinem Fenster. Im Folgenden finden Sie Format API-Aufruf:

StartMessaging(<WindowHandle>,WM_MESSAGE_API); 

ich eine regelmäßige reguläre MFC DLL benötigt, das ein verstecktes CFrameWnd Fenster nur zum Empfangen der Nachrichten erstellen wird. Ich verwende auch AFX_MANAGE_STATE() am gesamten Einstiegspunkt der DLL.

Constructor Code in meiner CFrameWnd abgeleitete Klasse:

erstellen (NULL, "MyWindow"); hWndFrame = this-> m_hWnd;

Nachricht Maps:

LRESULT CMyDerivedWnd::OnMsgApi(WPARAM wParam, LPARAM lParam) 
{ 
OutputDebugString("OnMsgApi"); 
return (LRESULT)0; 
} 

Meine Hauptklasse, wo der StartMessaging genannt wird: In Constructor instanziiert ich das CFrameWnd-Objekt:

myDerivedWnd = new CMyDerivedWnd (this);

und dann wird InitiateMessaging genannt:

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

Mein GetWindowText Funktion der richtigen Fensternamen zurückgibt, aber ich bin zu stoppen WM_MESSAGE_API Nachricht in dieser Klasse nicht in der Lage. Ich habe auch versucht, Erweiterung DLL aber das gleiche Ergebnis.

+0

Ich habe eine Beispiel-MFC Dialog-basierte App, die mit der gleichen API funktioniert. – cloudnine

+0

Ich habe vergessen zu erwähnen, dass diese reguläre DLL von einem .NET-Client aufgerufen wird. – cloudnine

Antwort

0

Ich fand das Problem, noch nicht die Antwort. Es wurde Threads auf C# -Seite verursacht das Ereignis nicht angezeigt. Wenn der Aufruf von C++ Interop auf dem Haupt-Thread ist, funktioniert Ereignis, aber ich brauche den Aufruf in einem separaten Thread. Ich plane, eine weitere Frage zu stellen, um eine Antwort zu finden.

Verwandte Themen