簡體   English   中英

解密將Visual C ++ 6項目升級到Visual Studio 2008中的錯誤

[英]Deciphering errors in upgrading a Visual C++ 6 project to Visual Studio 2008

我想看看是否可以在Windows Vista 中使這個名為MouseTool的開源項目停止工作。 這是一個使用戶(如我自己)在單擊鼠標時感到疼痛的人的停留單擊器。 當鼠標停留在屏幕上的某個位置時,此軟件會模擬單擊。

幾年來似乎沒有人碰過這個項目,因此當我在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()

給任何人敲鍾?

在vc6中未正確檢查某些MFC事件處理程序的成員簽名-在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代替OnNclButtonDown的ON_MESSAGE。

問題在於,在較新版本的Visual Studio中,對函數簽名的檢查更加嚴格。 舊的MFC宏代碼會讓事情發生變化,但它們確實起作用。

要修復錯誤,您將需要檢查消息映射中的每條消息,並更改與簽名匹配的方法。

編輯: WM_NCLBUTTONDOWN通知聲明它需要WPARAMLPARAM ,它們被視為int和指向POINTS結構的指針。 the w and l parameters to the type, it should be fine. 因此,如果將簽名更改為使用WPARAM w, LPARAM l而不是UINT, POINTS ,然后 wl參數強制轉換為類型,則應該沒問題。

這更多的是要使簽名和功能真正匹配,而不是改變它們的工作方式。

我遇到了同樣的問題,但是接收消息的類不是從CWnd派生的(派生自CWinThread)。

關於哪個宏可以讓我接收消息的任何想法?

編輯:永遠帶我去挖掘MSDN來找到它,但是對從CWinThread派生的類使用ON_THREAD_MESSAGE()(應該已經想到了這一點...)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM