Как заменить устаревший код atl (предупреждение Visual Studio 2015 C4467)?
Структура данных находится в файле DataType.hзамена устаревшего атрибута atl
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]
Указывает, что одномерная голец, wchar_t, байт, или эквивалентный массив или указатель на такой массив должен рассматриваться как строка.
Поэтому я должен найти способ сообщить DCOM, что это WCHAR *
является строкой. Но почему и как?
Хорошо, я нашел показание в книге «Внутри распределенного COM» от Гая и Генри Эддона. Они заявляют, что атрибут [string]
позволяет пользователю отправлять строки без определения фактической длины строки. Если атрибут опущен, вам необходимо реализовать управление памятью этой строки, используя CoTaskMemAlloc
и CoTaskMemFree
.
Я не вижу контекста, поэтому немного сложно ответить. Если это просто ключевое слово MIDL, просто удалите его и добавьте в проект подходящий файл idl. – xMRi
Вернувшись к проекту, я исправил контекст вопроса и добавил некоторые результаты исследований, найденные в прошлом месяце. – Melli