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.

Était-ce utile?

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 );
};
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top