Ошибка при использовании раскрытия макроса для объявлений функций

0

Я пытаюсь создать прокси-класс для задержки загрузки разделяемой библиотеки.

Одна из функций 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

Может ли кто-нибудь объяснить, почему?

Теги:
dll
macros

1 ответ

0

Ну, очевидная ошибка. Вызов m_fAttachCWnd не должен включать объявление типа, но только аргументы:

return m_fAttachCWnd (CWnd* pControl);

должен стать

return m_fAttachCWnd (pControl);

Спасибо @chris.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню