質問

我々は、このようにいろいろ書いているそのうちの2つが定義された複数のインタフェースを持つIDLファイルを持っています

[
     object,
     uuid(79E24BAA-DC12-4caf-91DD-2A4D47FED30A),
     helpstring("ISomeInterface Interface"),
     pointer_default(unique)
]
interface ISomeInterface: IUnknown
{
     [propget, id(2)]
     HRESULT SOMEMethod([out, retval] BSTR* pValue);
};

[
    object,
    uuid(834421B6-511D-457D-B50C-69E7E1B65471),
    dual,
    nonextensible,
    helpstring("IACompleteDifferentInterface Interface"),
    pointer_default(unique)
]
interface IACompleteDifferentInterface : IDispatch
{
   [propget, helpstring("property SomeMethod")]
   HRESULT SomeMethod([out, retval] BSTR* pVal);
   [propput, helpstring("property SomeMethod")]
   HRESULT SomeMethod([in] BSTR newVal);
}

これは(異なる筐体で示されているようであるが)同じ名前の一つの方法を持って起こる2つの完全に無関係のインターフェースです。 すべては私たちがプロジェクトをコンパイルしようしかしとき、[OK]を思わ呼び出し

ISomeInterface -> SOMEMethod 

私たちは、それが存在しないというエラーを取得します。私たちが呼び出した場合、

ISomeInterface -> SomeMethod 

それだけで罰金をコンパイルします。

私たちは、それはまた、[OK]をコンパイルする方法のいずれかの名前を変更する場合。私は2つの異なるインターフェイスでの命名の衝突を期待していないだろうが表示されますが起こっていることをことを。

私たちは、単にそれらの1の名前を変更して、それを修正することができますが、私は問題を理解するだろう本当に好き。誰も私のためにそれを説明できますか? おかげ

役に立ちましたか?

解決

サイキックデバッグpowerzは、管理対象のプロジェクトにタイプライブラリを使用していることを私に伝えます。 .NETのタイプライブラリインポータ(Tlbimp.exe)は、より多くの図書館で何度も表示された場合には、不適切なメソッドやプロパティ名を大文字、あいまいなバグがあります。それが遭遇した最初のものの総額を使用します。

最初のアプローチは、それを無視することで、マネージコードだけで間違った総額で識別子を使用することができます。それとも、輸入をアップグレードすることができ、私はかなり確かこのバグは、この1 で修正されましたよ>。

他のヒント

IDLは、私には罰金です。結果のタイプライブラリは、あなたのアプリにインポートされている方法に問題がなければなりません。

あなたのの#importするをチェック文。 IACompleteDifferentInterfaceに "のsomeMethod" へ "のsomeMethod"、またはISomeInterfaceを変更する名前の変更属性がありますか?

の#importによって自動生成されたヘッダで見てください。あなたはそこに手がかりを見つけることができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top