我有两个项目,A和B
项目A编制为:
1.标准Windows库
2.多字节字符集
3.没有共同的语言支持
项目B编制时:
1. MFC作为动态dll
2.多字节字符集
3.使用通用语言支持
以下函数在项目A中定义:
LPCTSTR CAppProxy::DriverName(IDriverAgent *driver)
{
BSTR bstr;
HRESULT hr = driver->get_Name(&bstr);
CString str = CString(bstr);
return(str);
}
并使用以下方式从项目B调用:
CString name = appProxy->DriverName(driver);
但是当调用驱动程序名称时,“name”的内容是垃圾
答案 0 :(得分:4)
一个经典错误,你将返回一个指向本地对象的指针,该对象在函数结束时到达其生命周期的末尾。包含字符串的堆栈被释放并用随机的东西覆盖。
更具体地说,您将返回一个指向CString对象内部数据结构的指针,该数据结构在CString被销毁时失效。
如果两个项目都使用相同版本的CString,您可以返回其中一个而不是LPCTSTR。