インターフェイスを実装する COM クラスを作成しました。このインターフェイスにメソッドを追加したいと思います。このメソッドのパラメーターは、外部の olb ファイルで定義されたインターフェイスへのポインターです。私のプロジェクトでは、この olb ファイルはno_namespaceディレクティブなしでインポートされました。したがって、メソッドのパラメーターのインターフェイス名は、h\cpp ファイルで修飾する必要があります。しかし、MIDL は名前空間を認識せず、メソッドで修飾されていないインターフェイスを持つヘッダー ファイルを生成します。したがって、エラー C2061 です。少しサンプル:
//stdafx.h
#import "somelib.olb" named_guids no_function_mapping
somelib.olb で定義された interface Foo。私のプロジェクトでの修飾名はsomeLib::Foo
//myproject.idl
...
[
object,
uuid(...),
...
]
library MyProjectLib
{
importlib(somelib.olb);
...
[
object,
uuid(...),
helpstring(...),
pointer_default(unique)
]
interface IMyInterface : IUnknown{
[propputref, helpstring("...")] HRESULT Bar ([in] IFoo* Parent);
};
MIDL はヘッダー ファイル MyProject.h を生成します
//MyProject.h
...
IMyInterface : public IUnknown
{
public:
virtual /* [helpstring][propputref] */ HRESULT STDMETHODCALLTYPE putref_Bar(
/* [in] */ /* external definition not present */ IFoo *Parent) = 0;
};
...
そしてエラーメッセージ
error C2061: syntax error : identifier 'IFoo'
この問題を解決するには?前もって感謝します。