如何替换弃用的atl代码(Visual Studio 2015警告C4467)?
数据结构位于文件DataType.h
struct SData4
{
SData4() { Init(); }
~SData4() { Delete(); }
void Init();
void Delete();
LPWSTR m_strSomething;
[string] LPWSTR m_strCode;
};
IDL文件包含使用此结构的方法declerations,如下所示:
// interface version 6.0
[
object,
uuid(...-.-.-.-.),
helpstring("IData4 Interface"),
pointer_default(unique)
]
interface IData4 : IUnknown
{
[helpstring("method SetData")] HRESULT SetData([in] long lLen, [in, size_is(lLen)] SData4* s);
};
我不能得到的是,在同一个结构中有LPWSTR
个定义没有[string]
属性。它已经工作了十年:/微软帮助页面https://msdn.microsoft.com/en-gb/library/8tesw2eh.aspx表明
[string]
表示必须将一维char,wchar_t,byte或等效数组或指向此类数组的指针视为字符串。
所以我必须找到一种方法告诉DCOM这个WCHAR *
是一个字符串。但为什么以及如何?
好的,我在书中找到了一个指示" Inside Distributed COM"来自Guy和Henry Eddon。他们声明,[string]
属性允许用户在不定义实际字符串长度的情况下发送字符串。如果省略该属性,则必须使用CoTaskMemAlloc
和CoTaskMemFree
实现此字符串的内存管理。
答案 0 :(得分:2)
要替换[string]
或其他ATL属性,通用解决方案是在项目设置中启用“扩展属性源”选项。然后,在构建代码时,您将拥有一个非属性C ++代码,其中属性处理器扩展了属性。检查扩展代码,您会看到哪些非归因代码与您最初的代码相对应。