我创建了一个将所有事件通知代码转换为字符串的函数。真的很简单的东西。
我有一堆像
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++,所以如果这很明显,请不要小看我忽略了它是有原因的。