我应该如何替换已弃用的 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 文件包含使用此结构的方法声明,如下所示:
// 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 *
是一个字符串。但为什么以及如何?
好的,我在 Guy 和 Henry Eddon 的“Inside Distributed COM”一书中找到了指示。他们声明,该[string]
属性允许用户在不定义实际字符串长度的情况下发送字符串。如果省略该属性,则必须使用CoTaskMemAlloc
and来实现该字符串的内存管理CoTaskMemFree
。