Я создал 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'
Как решить эту проблему? Заранее спасибо.