Frage

Hier ist eine sehr einfache IDL -Schnittstelle, die wir unter VS2008 erfolgreich verwendet haben (Argumenteliste verkürzt für Kürze):

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

Wir migrieren die Lösung auf VS2010 SP1. Jetzt haben wir den folgenden Build -Fehler:

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

Dies funktionierte immer wie ein Zauber mit VS2008 SP1 -Note, den ich bereits ersetzt habe in durch [in]. Während ich mich am Kopf kratzte, entdeckte ich, dass Midl 2010 ebenfalls nicht mag in Aber sag nichts darüber [in].

Beachten Sie, dass unsigned short wird akzeptiert (wie durch Invertieren der beiden Methoden der Schnittstelle beobachtet).

Woher? Wie kann ich Midl verstehen lassen? string wieder ?

Tia.

War es hilfreich?

Lösung 3

Es scheint, dass die IDL -Datei, obwohl im Projekt vorhanden, überhaupt nicht verwendet wird. VS2008 ignorierte es still (wie es für eine nicht referenzierte .h -Datei tun würde). Aus irgendeinem Grund versucht VS2010 zu kompilieren, auch wenn es nirgendwo anders verwiesen wird. Und da der Inhalt völlig fehlerhaft ist (String ist in der Tat kein nationaler IDL -Typ, sondern ein Attribut wie am besten), habe ich jetzt Fehler.

Lösung: Datei aus dem Projekt ausschließen!

Andere Tipps

Es sieht so aus, als ob Compiler nichts über den Typ 'String' weiß, vielleicht haben Sie vergessen, eine Referenz in das Projekt aufzunehmen, oder der Standort in VS2010 usw. usw. Doppelte Überprüfung für Einbeziehung, Referenzen und ein Like.

Ps tut das macht Sinn?

Für die Enthüllung von C# dies:

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

Ich habe gesehen, dass Sie es möglicherweise bedeuten, es aus C ++ auszusetzen:

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 );
};
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top