2013-11-09 7 views
0

Я хочу иметь класс, который создает окно с WinAPI. Функция wndproc должна быть методом указанного класса. Поэтому я нашел способ сделать это (см. Код ниже), но, к сожалению, он не будет компилироваться с VS2013.
Этот код скомпилирован с VS2010 без ошибок или предупреждений.VS2013 wndProg Метод обратного вызова

В моем файле .h:

typedef long(__stdcall* WNDPROC)(void*,unsigned int,unsigned int,long); 

class LWindow 
{ 
private: 
    //... 

    static LRESULT CALLBACK wndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam); 


public: 
    LWindow(int width, int height, bool framed); 
    ~LWindow(); 

    //... 
}; 


В моем файле .cpp:

LWindow::LWindow(int width, int height, bool framed) 
{ 
    //... 
    WNDCLASS wc = {0}; 
    wc.lpfnWndProc = wndProc; 
    //... 
} 


Сообщение об ошибке

1>l:\opt\microsoft visual studio 12.0\vc\include\xrefwrap(283): error C2064: term does not evaluate to a function taking 0 arguments 
+0

Проверьте #include и пути. Иногда они различаются между итерациями инструментальных средств компилятора. BTW, на какой линии это происходит? – edtheprogrammerguy

+0

Эта строка в xrefwrap внутри функции вариационного шаблона, невозможно рассказать, как туда попал ваш код. Произошла какая-то ошибка в реализации C++ 11, в VS2013 было много работы. Redeclaring WNDPROC было очень плохой идеей кстати. –

+0

@ HansPassant: Спасибо, я исправлю это. –

ответ

0

Ну. Теперь, обойдя эту часть кода в течение почти часа и заглянув в строку static LRESULT CALLBACK wndProc..., потому что он не дал мне четкого номера строки, я узнал, что я включаю в себя некоторые серьезные старые файлы, которые вызывают проблему.
Спасибо, @edtheprogrammerguy, это был намек, в котором я нуждался!

Смежные вопросы