DCOM-Debugging-Techniken

DCOM-Debugging-Techniken

Von DCOM lernen von Thuan L. Thai, O’Reilly und Mitarbeitern, 1999

Hier ist eine einfache, aber sehr leistungsfähige Technik zum Debuggen verteilter Komponenten.

Verwenden der FormatMessage-Funktion

Denken Sie daran, dass Sie die Rückgabe HRESULT für alle COM-API-Funktionen und Methodenaufrufe überprüfen müssen, da HRESULT ein wichtiges Element ist, um festzustellen, was beim letzten COM-bezogenen Aufruf schief gelaufen ist. Im folgenden Codeausschnitt rufen wir eine spezielle Hilfsfunktion auf, wenn das zurückgegebene HRESULT schlecht ist. DisplayError, zu der mit dem HRESULT verknüpften Fehlermeldung:

   
HRESULT hr = pOcr->OcrImage( );  
if (FAILED(hr)) DisplayError(hr); 

Um die Textdarstellung eines systemdefinierten HRESULT zu erhalten, können Sie die FormatMessage Win32-API-Funktion verwenden. Hier ist die DisplayError Hilfsfunktion, die verwendet FormatMessage um die Fehlerzeichenfolge mit einem bestimmten Statuscode zu erhalten.

   
void DisplayError (HRESULT hr)  {       
    if  (hr == S_OK) return;        
    if  (HRESULT_FACILITY(hr) == FACILITY_WINDOWS)      
    hr = HRESULT_CODE(hr);
        wchar_t *pwszStatus;
        // FormatMessageW is the Unicode version of FormatMessage.
        FormatMessageW(
            FORMAT_MESSAGE_ALLOCATE_BUFFER |
                            FORMAT_MESSAGE_FROM_SYSTEM,
            NULL,
            hr,
            MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
            (LPWSTR)&pwszStatus,
            0,
            NULL        );
        // MessageBoxW is the Unicode version MessageBox.
        MessgeBoxW(NULL, pwszStatus, L"DisplayError", MB_OK);
        LocalFree(pwszStatus);
    }
 

Das vorherige Code-Snippet zeigt die Fehlerzeichenfolge an, die einem HRESULT zugeordnet ist. Diese Informationen helfen beim Debuggen Ihres Codes enorm, da sie Ihnen das genaue Problem darstellen, das beim letzten COM-bezogenen Aufruf aufgetreten ist. Zum Beispiel, wenn ein Teil des Client-Codes aufgerufen wird CoCreateInstanceEx Um eine COM-Klasse zu aktivieren, aber die Klasse ist nicht registriert, erhalten Sie die Meldung “Die Klasse ist nicht registriert”. Wenn Sie den genauen Fehler kennen, können Sie die entsprechenden Maßnahmen ergreifen.

Beachten Sie, dass ein Helfer wie funktioniert DisplayError kann sowohl auf Client- als auch auf Serverseite verwendet werden. Wenn Sie ein schlechtes HRESULT erhalten, rufen Sie diese Funktion auf, um genau herauszufinden, was schief gelaufen ist.

Das O’Reilly-Buch DCOM lernen verfügt über zwei weitere Techniken zum Debuggen verteilter Komponenten. Es ist verfügbar bei https://www.oreilly.com/

Similar Posts

Leave a Reply