2009-10-05 12 views
14

Ich habe bereits ein Projekt, das viel COM und HRESULTS verwendet. ANyways Ich habe mich gefragt, ob es möglich ist, ein eigenes HRESULT zu definieren und das FormatMessage() für unser eigenes HRESULT zu verwenden?Erstellen Sie Ihr eigenes HRESULT?

Ich grub herum und kann nichts finden. Irgendwelche Ideen?

EDIT

Im Grunde will ich statt nur Rückkehr E_FAIL eine Reihe von meiner eigenen HRESULT ist definieren. Oder einer der anderen generischen. Wie E_FAIL ist in Ordnung. Aber ich möchte sagen, dass zum Beispiel das Geoprocessing Subsystem abgestürzt ist oder die Datei ein ungültiges Raster Image ist. Die Anwendung verwendet bereits com durch es heraus.

Antwort

12

Ja natürlich. Normalerweise erstellen Sie eine .mc file und fügen diese in Ihr Projekt ein. Weisen Sie die mc compiler an, es zu erstellen - das erstellt eine Headerdatei und eine RC-Datei. Die HRESULTS sind in der Header-Datei definiert. Sie fügen die .rc-Datei in Ihr Projekt ein, damit der Ressourcencompiler kompiliert werden kann. Dadurch werden die Nachrichtendefinitionen in Ihr endgültiges Modul eingefügt. Dann können Sie die normalen FormatMessage Funktionen verwenden, um die Nachrichten mit den HRESULTS zu formatieren und Fehlerinformationen und die anderen Sachen zu erzeugen.

Ich habe dies als die Kommandozeile für einen meiner .mc Dateien:

mc -h "../include" -r "../include" "..\include\errors.mc" 

Das schafft errors.rc und errors.h im Verzeichnis enthalten. Dann tat ich:

#include "errors.rc" 

in meiner Hauptdatei .rc für das Projekt.

Die .mc Datei sieht ein bisschen wie folgt aus:

LanguageNames=(English=0x409:MSG00409) 

MessageId=0x1 
SymbolicName=SOME_CATEGORY 
Language=English 
Some Category 
. 

MessageID= 
Severity=Error 
SymbolicName=ERROR_INVALID_PROP_INDEX 

Language=English 
Invalid property index %1 
. 

mit vielen Fehlernummern definiert.

+0

Perfekt hat den Trick gemacht – UberJumper

Verwandte Themen