廃止予定のatlコード(Visual Studio 2015警告C4467)をどのように置き換える必要がありますか?
データ構造はファイル内 廃止予定のatl属性を置き換えます
struct SData4
{
SData4() { Init(); }
~SData4() { Delete(); }
void Init();
void Delete();
LPWSTR m_strSomething;
[string] LPWSTR m_strCode;
};
DataType.h
ある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]
属性を持たない定義。そして、それは十年のために働いています。Microsoftヘルプ/ページhttps://msdn.microsoft.com/en-gb/library/8tesw2eh.aspxは
[string]
は、1次元のchar、wchar_tの、バイト、または同等の配列またはそのような配列へのポインタのように扱われなければならないことを示していることを述べて文字列。
DCOMにこのWCHAR *
が文字列であることを伝える方法を見つける必要があります。しかし、なぜ、どのように?
[OK]を、私はGuyとHenry Eddonの "Inside Distributed COM"という本の中に示しました。 [string]
属性を使用すると、実際の文字列の長さを定義せずに文字列を送信できます。属性を省略すると、CoTaskMemAlloc
とCoTaskMemFree
を使用してこの文字列のメモリ管理を実装する必要があります。
私は文脈がないので、少し答えにくいです。それがちょうどMIDLキーワードの場合は、それを削除して、正しいマッチングidlファイルをプロジェクトに追加してください。 – xMRi
プロジェクトに戻った後、質問文脈を修正し、先月にいくつかの調査結果を追加しました。 – Melli