在進行COM編程的時候常常用到VARIANT類型的變數, 其中的字串分量為bstrVal即雙位元組的BSTR, 如果需要將其轉換為字串STRING我以前使用強制類型轉換:
(const char*)bsVal;
在看了潘愛民老師的<<COM編程原理>>偶爾發現如下函數(例子摘自MSDN)
//compile options needed: /Gr or /Gz
#include <comutil.h>
int main()
{
char sz[]="hello";
_bstr_t b;
b = _com_util::ConvertStringToBSTR(sz);
char * p = _com_util::ConvertBSTRToString(b);
return 1;
}
注意: 上述代碼編譯時間候出現如下錯誤
error LNK2001: unresolved external symbol "char * __fastcall
_com_util::ConvertBSTRToString(unsigned short *)"
(?ConvertBSTRToString@_com_util@@YIPADPAG@Z)
error LNK2001: unresolved external symbol "unsigned short * __fastcall
_com_util::ConvertStringToBS
TR(char const *)" (?ConvertStringToBSTR@_com_util@@YIPAGPBD@Z)
解決: 在Link頁加入comsupp.lib就可以了, 不過我的程式編譯的時候沒有上述錯誤, 但是在同事的機器上出現了.
我的用法 -- _com_util::ConvertStringToBSTR();
char* pTemp;
CString csTemp;
pTemp = _com_util::ConvertBSTRToString(bsVal);
csTemp = pTemp;
delete pTemp;
pTemp = NULL;
// 這是我們公司的一位高手的最安全的用法
// 對於ConvertStringToBSTR不需要