1

インターフェイスを実装する 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'

この問題を解決するには?前もって感謝します。

4

0 に答える 0