Неквалифицированное имя в IDL для импортированной библиотеки типов - PullRequest
1 голос
/ 24 июня 2010

Я создал COM-класс, который реализует некоторый интерфейс. Я хочу добавить метод к этому интерфейсу. Параметр этого метода - указатель на интерфейс, определенный в каком-то внешнем olb-файле. В моем проекте этот olb-файл импортирован без директивы no_namespace. Таким образом, имя интерфейса в параметре метода должно быть указано в файлах h \ cpp. Но MIDL не распознает пространства имен и создает заголовочный файл с неквалифицированным интерфейсом в методе. Итак, ошибка C2061. Маленький образец:

//stdafx.h
#import "somelib.olb" named_guids no_function_mapping

В somelib.olb определен интерфейс 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'

Как решить эту проблему? Заранее спасибо.

...