Я пытаюсь создать прокси-класс для задержки загрузки разделяемой библиотеки.
Одна из функций API библиотеки:
int AttachCWnd(CWnd* pControl);
Итак, я создал макрос, чтобы легко объявлять и перенаправлять вызовы из класса прокси в библиотеку:
class CLibProxy {
public:
typedef int (*tAttachCWnd)(CWnd*);
tAttachCWnd m_fAttachCWnd;
};
#define DECL_ROUTE(name, ret, args) \
ret CLibProxy::name args \
{ \
if (m_hDLL) \
return m_f##name (args); \
return ret(); \
}
DECL_ROUTE(AttachCWnd, int, (CWnd* pControl));
Но компиляция не выполняется на VS2010:
error C2275: 'CWnd' : illegal use of this type as an expression
Может ли кто-нибудь объяснить, почему?
Ну, очевидная ошибка. Вызов m_fAttachCWnd не должен включать объявление типа, но только аргументы:
return m_fAttachCWnd (CWnd* pControl);
должен стать
return m_fAttachCWnd (pControl);
Спасибо @chris.