Я создал функцию, которая преобразует все коды уведомлений о событиях в строки.Довольно простые вещи на самом деле.
У меня есть куча констант типа
const _bstr_t DIRECTSHOW_MSG_EC_ACTIVATE("A video window is being activated or deactivated.");
const _bstr_t DIRECTSHOW_MSG_EC_BUFFERING_DATA("The graph is buffering data, or has stopped buffering data.");
const _bstr_t DIRECTSHOW_MSG_EC_BUILT("Send by the Video Control when a graph has been built. Not forwarded to applications.");
.... etc....
и моя функция
TCHAR* GetDirectShowMessageDisplayText( int messageNumber )
{
switch( messageNumber )
{
case EC_ACTIVATE: return DIRECTSHOW_MSG_EC_ACTIVATE;
case EC_BUFFERING_DATA: return DIRECTSHOW_MSG_EC_BUFFERING_DATA;
case EC_BUILT: return DIRECTSHOW_MSG_EC_BUILT;
... etc ...
Ничего страшного.Мне потребовалось 5 минут, чтобы собрать все вместе.
... но я просто не верю, что у меня есть все возможные значения, поэтому я хочу, чтобы по умолчанию было возвращено что-то вроде "Неожиданный код уведомления (7410) "если совпадений не найдено.
К сожалению, я все равно не могу придумать верный указатель без принуждения вызывающей стороны удалить память строки ... что не только неприятно, но иконфликтует с простотой других возвращаемых значений.
Так что я не могу придумать никакого способа сделать это, не меняя возвращаемое значение на параметр, в котором пользователь передает буфер и длину строки.Что сделало бы мою функцию похожей на
BOOL GetDirectShowMessageDisplayText( int messageNumber, TCHAR* outBuffer, int bufferLength )
{
... etc ...
Я действительно не хочу этого делать.Должен быть лучший способ.
Есть?
Я возвращаюсь в C ++ после 10-летнего перерыва, поэтому, если это что-то очевидное, не сбрасывайте со счетов то, что я пропустилэто по причине.