2012-11-14 86 views
2

(1)如何解決鑄造警告創造的MessageBox

wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_APPLICATION)); 

警告[解決!]:投從指針不同大小的整數[-Wpointer對INT-投]

解決方案

我用

wcex.hIcon = LoadIcon(NULL, IDI_APPLICATION); 
解決

因爲我已經看了IDI_APPLICATION定義,它被定義爲

#define IDI_APPLICATION MAKEINTRESOURCE(32512) 

奇怪? un peu。

(2)

MessageBox(NULL, 
     _T("Call to RegisterClassEx failed!"), 
     _T("Win32 Guided Tour"), 
     NULL); // < here 

警告[解決!]:使的 'MessageBoxW' 參數4時將指針整數,未作施放[默認啓用]

+0

什麼類型是'wcex.hIcon'?爲什麼當'MessageBox'中需要一個整數時傳遞NULL? – Mat

+2

對於第二個:說'0'。切勿使用NULL作爲整數 - 它不是!這是一個*指針*!它甚至不必將其所有的位等於零。 –

+1

@KerrekSB - 嗯,我只是複製並粘貼此代碼http://msdn.microsoft.com/en-us/library/bb384843.aspx – Fabricio

回答

0

1)從here

To use one of the predefined icons, set the hInstance parameter to NULL and the lpIconName parameter to one of the following values.

所以使用MAKEINTRESOURCE(IDI_APPLICATION)作爲第二個參數,可選的第一個應該是NULL

如果不是這樣......那麼你就是如何設置返回的,wcex.hIcon需要是一個指針,而不是intLoadIcon返回HICON類型,它是一個typedef到HANDLE這是一個typedef到VOIDP這是一個typedef到void *

所以,如果你這樣做:

int wcex.hIcon = LoadIcon(...) 

你會得到一個cast from pointer to integer警告。

2)從here開始,MessageBox()的前3個參數是可選的,第四個參數不是。當它期望UINT

+0

第一,我設置NULL,但警告還沒有。我認爲這與MAKEINTRESOURCE arg有關。 – Fabricio

+0

@Fabricio - 查看我的更新。我懷疑這更多的是來自'LoadIcon()'函數的返回值的設置。你可以檢查出來並更新wcex.hIcon的類型嗎? – Mike

+0

wcex.hIcon是HICON。 – Fabricio