Расшифровка ошибок при обновлении проекта Visual C ++ 6 до Visual Studio 2008 - PullRequest
0 голосов
/ 15 мая 2009

Я хотел посмотреть, смогу ли я привести этот несуществующий проект с открытым исходным кодом под названием MouseTool в соответствие с Windows Vista. Это кликер, чтобы помочь людям (таким как я), которые испытывают боль, когда они щелкают мышью. Это программное обеспечение имитирует щелчок, когда мышь останавливается в каком-либо месте на экране.

Кажется, никто не трогал этот проект в течение нескольких лет, поэтому, когда я открываю его в Visual Studio 2008, я получаю массу ошибок. Я очень мало знаю о Visual Studio и надеялся, что эти ошибки могут зазвонить кому-то здесь. Будем благодарны за любые советы, которые кто-то может дать о том, как я могу начать исправлять некоторые из этих ошибок.

Для выдержки из примера приведена эта ошибка. , .

Error   18  error C2440: 'static_cast' : 
cannot convert from 'void (__thiscall COptionsSheet::* )(UINT,POINTS)' 
to 'LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)'   

. , , соответствует этой строке:

ON_MESSAGE( WM_NCLBUTTONDOWN,   OnNCLDown )

из этого блока:

BEGIN_MESSAGE_MAP(COptionsSheet, CPropertySheet)
    //{{AFX_MSG_MAP(COptionsSheet)
    ON_WM_HELPINFO()
    ON_WM_MOUSEMOVE()
    ON_WM_SETCURSOR()
    //}}AFX_MSG_MAP
    ON_MESSAGE( WM_NCLBUTTONDOWN,   OnNCLDown )
    ON_MESSAGE( WM_NCLBUTTONUP,     OnNCLUp )
    ON_BN_CLICKED(ID_HELP, OnHelpButton)
END_MESSAGE_MAP()

Позвонить кому-нибудь?

Ответы [ 3 ]

3 голосов
/ 16 мая 2009

Подписи членов для определенных обработчиков событий MFC не были должным образом проверены в vc6 - код, скомпилированный по ошибке в VC6, должен быть исправлен для компиляции в обновленном компиляторе, который вы используете.

Обработчик для цели ON_MESSAGE должен соответствовать этой подписи:

afx_msg LRESULT (CWnd::*)(WPARAM, LPARAM).

Ваша подпись такая:

void (COptionsSheet::* )(UINT,POINTS)

CWnd уже имеет этого участника:

afx_msg void OnNcLButtonDown(UINT nHitTest, CPoint point);

Используйте эту подпись вместо своей собственной прокрутки OnNclDown.

Редактировать: использовать ON_WM_NCLBUTTONDOWN вместо ON_MESSAGE для OnNclButtonDown.

1 голос
/ 16 мая 2009

Проблема в том, что в более новых версиях Visual Studio существует более жесткая проверка сигнатур функций. Старый макрокод MFC позволил бы что-то ускользнуть, но они работали.

Чтобы исправить ошибки, вам необходимо проверить каждое сообщение в карте сообщений и изменить методы, чтобы соответствовать сигнатуре.

Edit: WM_NCLBUTTONDOWN Уведомление гласит, что оно принимает WPARAM и LPARAM, которые рассматриваются как int и указатель на структуру POINTS. Поэтому, если вы измените подпись, чтобы использовать WPARAM w, LPARAM l вместо UINT, POINTS, а затем cast w и l параметров для типа, все будет в порядке.

Это больше касается того, чтобы сигнатуры и функции действительно совпадали, чем изменение их работы.

0 голосов
/ 26 октября 2009

Я столкнулся с той же проблемой, но мой класс, который получает сообщения, не является производным от CWnd (производным от CWinThread).

Есть идеи о том, какой макрос позволит мне получить сообщение?

Edit: У меня ушло навсегда копаться в MSDN, чтобы найти это, но используйте ON_THREAD_MESSAGE () для классов, производных от CWinThread (должен был понять это ...).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...