2014-02-10 40 views
0

根據MSDN更換T2OLE,在循環中使用T2OLE可能導致堆棧溢出,我的應用程序使用T2OLE很多地方在內部循環的代碼字符串轉換。我發現,使用ATL 7.0字符串轉換類和宏有很多的好處,它解決了堆棧溢出的問題,以及,與ATL 7.0字符串轉換類和宏

我使用ATL 7.0如下,

_bstr_T example("Hello world"); 
for(i=o; i<10000; i++) 
{ 
Callsomemethod(i,T2OLE(example)); //This is where I need to replace T2OLE 
} 
void Callsomemethod(int k, cstring y) 
{ 
.... 
} 

我發現試過CT2OLE在ATL 7.0相當於T2OLE但是當我更換T2OLE與CT2OLE我得到這個問題

Error: No suitable user defined conversion from "ATL:CA2W" to Cstring exists 

以同樣的方式我如果它確實CString轉化成_bstr_t的其他地方,當我更換那邊我得到這個

Error: No suitable user defined conversion from "ATL:CA2W" to _bstr_t exists 

任何人都可以幫我解決這個問題嗎?

回答

0
_bstr_t example("Hello world"); 
void Callsomemethod(CString y); 
Callsomemethod(T2OLE(example)); //This is where I need to replace T2OLE 

CString的假定要傳遞TCHAR*兼容的說法,而x2OLE宏給你WCHAR* - 您使用的相反的方向上轉換的宏。而且有可能是CString和輔助CA2W類,你需要通過提供鑄造,以幫助缺少之間的轉換。

_bstr_t example("Hello world"); 
void Callsomemethod(CString y); 
//void Callsomemethod(LPCTSTR y); 

Callsomemethod(CString(example)); 
Callsomemethod(CString((BSTR) example)); 
Callsomemethod(OLE2CT(example)); 
Callsomemethod((LPCTSTR) OLE2CT(example));