質問

これは、VS2008で正常に使用した非常にシンプルなIDLインターフェイスです(Brevityのために短縮された引数リスト):

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]. 。頭を掻いている間、私は2010年のMidlも嫌いであることを発見しました in しかし、何も言わないでください [in].

ご了承ください unsigned short 受け入れられます(インターフェイスの2つの方法を反転させることで観察されます)。

どうして?どうすればMidlを理解させることができますか string また ?

ティア。

役に立ちましたか?

解決 3

IDLファイルは、プロジェクトには存在していますが、まったく使用されていないようです。 VS2008は静かにそれを無視しました(リファレンスされていない.hファイルの場合と同様)。何らかの理由で、VS2010は他の場所で参照されていなくてもコンパイルしようとします。また、コンテンツは完全にバグがあるため(Stringは確かにネイティブIDLタイプではなく、最良の属性です)、エラーがあります。

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

他のヒント

コンパイラはタイプ「文字列」について知らないように見えます。プロジェクトにリファレンスを含めるのを忘れたり、VS2010でロケーションが変更されたりすることを忘れてしまいました。

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

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 );
};
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top