1

以下は、VS2008 で正常に使用された非常に単純な IDL インターフェイスです (引数リストは簡潔にするために短縮されています)。

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

ソリューションを VS2010 SP1 に移行しています。これで、次のビルド エラーが発生しました。

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

これは、VS2008 SP1 を使用して常に魅力的に機能しました。既に に置き換えinたことに注意してください[in]。頭を悩ませているうちに、MIDL 2010 も嫌いinであるが何も言わないことがわかりました[in]

unsigned shortが受け入れられていることに注意してください(インターフェイスの 2 つのメソッドを逆にすることで確認できます)。

どうして?stringMIDL をもう一度理解させるにはどうすればよいですか?

ティア。

4

3 に答える 3

1

コンパイラはタイプ「文字列」を認識していないようです。プロジェクトに参照を含めるのを忘れているか、VS2010 で場所が変更されている可能性があります。インクルード、参照などを再確認してください。

PSそれは理にかなっていますか?

于 2011-09-06T10:39:28.470 に答える
0

C# から公開するには、次のようにします。

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

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 );
};
于 2011-09-06T16:44:53.983 に答える
0

IDL ファイルはプロジェクトに存在しますが、まったく使用されていないようです。VS2008 はそれを暗黙のうちに無視しました (参照されていない .h ファイルの場合と同様)。何らかの理由で、VS2010 は他の場所で参照されていなくてもコンパイルしようとします。また、内容が完全にバグがあるため (文字列は実際にはネイティブ IDL 型ではなく、最適な属性です)、エラーが発生しました。

解決策: プロジェクトからファイルを除外してください!

于 2011-09-14T14:02:50.597 に答える