すべてのイベント通知コードを文字列に変換する関数を作成しました。本当にシンプルなもの。
私はのようなconstsの束を持っています
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 ...
私は本当にそれをしたくありません。もっと良い方法があるはずです。
ある?
私は 10 年間の休止期間を経て C++ に戻ってきたので、それが明らかな場合でも、何らかの理由で見落としていたことを軽視しないでください。