VS2010への移行後の奇妙なIDLエラー
-
26-10-2019 - |
質問
これは、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 );
};
所属していません StackOverflow