Comment remplacer le code ATL obsolète (C4467 de Visual Studio 2015)?
La structure de données est dans un fichier DataType.hremplacement de l'attribut atl obsolète
struct SData4
{
SData4() { Init(); }
~SData4() { Delete(); }
void Init();
void Delete();
LPWSTR m_strSomething;
[string] LPWSTR m_strCode;
};
Le fichier contient IDL méthode declerations utilisant cette structure comme suit:
// 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);
};
Ce que je ne comprends pas est, qu'il ya LPWSTR
définitions sans l'attribut [string]
dans la même structure. Et il a travaillé pendant une dizaine d'années:/La page d'aide de Microsoft https://msdn.microsoft.com/en-gb/library/8tesw2eh.aspx stipule que
[string]
Indique que l'unidimensionnel char, wchar_t, octet, ou un tableau équivalent ou le pointeur sur un tel tableau doit être traité comme un chaîne.
Donc je dois trouver un moyen de dire à DCOM que cette WCHAR *
est une chaîne. Mais pourquoi et comment? Ok, j'ai trouvé une indication dans le livre "Inside Distributed COM" de Guy et Henry Eddon. Ils indiquent que l'attribut [string]
permet à l'utilisateur d'envoyer des chaînes sans définir la longueur de chaîne réelle. Si l'attribut est omis, vous devez implémenter la gestion de la mémoire de cette chaîne en utilisant CoTaskMemAlloc
et CoTaskMemFree
.
Je ne vois pas de contexte, il est donc un peu difficile de répondre. S'il s'agit simplement d'un mot clé MIDL, supprimez-le et ajoutez un fichier idl correspondant au projet. – xMRi
Après mon retour au projet, j'ai corrigé le contexte de la question et ajouté quelques résultats de recherche trouvés le mois dernier. – Melli