Pregunta

Aquí hay una interfaz IDL muy simple que hemos utilizado con éxito en VS2008 (lista de argumentos acortados para brevedad):

interface Mailer
{
    string findNode( [in] string requestedNode );
    unsigned short addMessage( [in] string msg, [in] unsigned short kind );
};

Estamos migrando la solución a VS2010 SP1. Ahora tenemos el siguiente error de compilación:

M.idl(3): error MIDL2025: syntax error : expecting a type specification near "string"

Esto siempre funcionó como un encanto usando VS2008 SP1 Nota que ya reemplacé in por [in]. Mientras me rascaba la cabeza, descubrí que Midl 2010 también no le gusta in Pero no digas nada sobre [in].

Tenga en cuenta que unsigned short se acepta (como se observa al invertir los 2 métodos de la interfaz).

¿Cómo? ¿Cómo puedo hacer que Midl entienda string otra vez ?

Tia.

¿Fue útil?

Solución 3

Parece que el archivo IDL, aunque está presente en el proyecto, no se usa en absoluto. VS2008 lo ignoró en silencio (como lo haría para un archivo .h sin referencia). Por alguna razón, VS2010 intenta compilarlo incluso si no se hace referencia en ningún otro lugar. Y dado que el contenido es totalmente erróneo (la cadena no es un tipo de IDL nativo sino un atributo como el mejor), ahora tengo errores.

Solución: ¡Excluya el archivo del proyecto!

Otros consejos

Parece que el compilador no sabe sobre el tipo de 'cadena', tal vez olvidó incluir alguna referencia en el proyecto, o su ubicación cambia en VS2010, etc. Compruebe doble para incluir, referencias y un gusto.

PS lo hace que ¿tiene sentido?

Para exponer a C#, esto:

  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 );
    };

Vi que posiblemente te refieres a exponerlo 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 );
};
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top