我創建了一個將所有事件通知代碼轉換爲字符串的函數。非常簡單的東西。是否可以安全地從函數中返回一個TCHAR *
我有一堆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++,所以如果它是明顯的東西,不要打折我忽略它的原因。
如果要返回的消息是靜態常量,或者它們是即時生成的,則我不太清楚。如果前者,似乎沒有問題,並且您可以直接返回指向它們的指針,因爲它們永遠不需要解除分配。 – jalf 2010-09-16 21:52:24