1

我有两个项目,A 和 B

项目 A 编译时使用:
1. 标准 Windows 库
2. 多字节字符集
3. 不支持通用语言

项目 B 编译时使用:
1. MFC 作为动态 dll
2. 多字节字符集
3. WITH 使用公共语言支持

在项目 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);

但是当调用驱动程序名称时,“名称”的内容是垃圾

4

1 回答 1

4

一个典型的错误是,您正在返回一个指向本地对象的指针,该对象在函数结束时到达其生命周期的末尾。包含字符串的堆栈被释放并被随机的东西覆盖。

更具体地说,您将返回一个指向 CString 对象内的数据结构的指针,该数据结构在 CString 被销毁时无效。

如果两个项目都使用相同版本的 CString,您可以返回其中一个而不是 LPCTSTR。

于 2012-01-12T23:12:15.620 回答