Étrange erreur IDL après la migration vers VS2010
-
26-10-2019 - |
Question
Voici une interface IDL très simple que nous avons utilisé avec succès dans VS2008 (arguments liste raccourcies par souci de concision):
interface Mailer
{
string findNode( [in] string requestedNode );
unsigned short addMessage( [in] string msg, [in] unsigned short kind );
};
Nous migrez la solution à VS2010 SP1. Maintenant, nous avons l'erreur de génération suivante:
M.idl(3): error MIDL2025: syntax error : expecting a type specification near "string"
a toujours travaillé comme un charme en utilisant VS2008 SP1
Notez que je l'ai déjà remplacé par in
[in]
. Tout en me gratter la tête, j'ai découvert que MIDL 2010 n'aime aussi in
mais ne dit rien au sujet [in]
.
Notez que unsigned short
est acceptée (comme on l'observe en inversant les 2 méthodes de l'interface).
Comment venir? Comment puis-je faire comprendre MIDL string
à nouveau?
TIA.
La solution 3
It appears that the IDL file, although present in the project, isn't used at all. VS2008 silently ignored it (as it would do for an unreferenced .h file). For some reason, VS2010 tries to compile it even if it's not referenced anywhere else. And since the contents is totally buggy (string is indeed not a native IDL type but an attribute as best), I now have errors.
Solution: Exclude file from project!
Autres conseils
On dirait compilateur ne connaît pas le type « string », peut-être vous avez oublié d'inclure une référence dans le projet, ou son emplacement changé en VS2010, etc. Vérifiez la présence comprend, références et autres.
P.S. Est-ce que que a du sens?
Pour exposer de C #, ceci:
interface Mailer
{
[return, MarshalAs(UnmanagedType.BStr)]
string findNode( [In, MarshalAs(UnmanagedType.BStr)] string requestedNode );
unsigned short addMessage( [In, MarshalAs(UnmanagedType.BStr)] string msg, [in] unsigned short kind );
};
J'ai vu que vous dire peut-être exposer de C ++:
interface Mailer
{
HRESULT findNode( [out, retval] BSTR* result, [in] BSTR requestedNode );
HRESULT addMessage( [out, retval] unsigned short* result, [in] BSTR msg, [in] unsigned short kind );
};