Đây là mã tôi có:Câu hỏi liên quan đến "C4312 cảnh báo: 'loại dàn diễn viên"
HWND WebformCreate(HWND hParent, UINT id)
{
return CreateWindowEx(0, WEBFORM_CLASS, _T("about:blank"),
WS_CHILD | WS_CLIPSIBLINGS | WS_VISIBLE, 0, 0, 100, 100, hParent,
(HMENU)id, GetModuleHandle(NULL), 0);
}
Đây là cảnh báo tôi nhận được:
warning C4312: 'type cast' : conversion from 'UINT' to 'HMENU' of greater size
Đây là những câu hỏi tôi có:
- Tại sao trình biên dịch nghĩ rằng ý tưởng tồi là truyền sang loại lớn hơn?
- Cách tốt nhất để loại bỏ cảnh báo là gì? (Tôi không muốn vô hiệu hóa nó.)
- Làm một loại hai diễn viên như thế này:
(HMENU)(UINT_PTR)id
sẽ loại bỏ cảnh báo. Sao lại như vậy? - Tắt "Phát hiện vấn đề về khả năng di chuyển 64 bit" (Wp64) cũng sẽ loại bỏ cảnh báo. Tại sao Wp64 không được dùng nữa? Tôi có nên dùng nó không?
Tôi không hiểu. Bạn có thể mở rộng câu trả lời này không? Tôi không giao dịch với con trỏ ở đây. Nó chỉ là một id điều khiển. – Tobbe
HMENU là một Xử lý cho một Menu, đó là một con trỏ. typedef HMENU__ * HMENU là định nghĩa của HMENU. – Puppy
Mã hoạt động tốt như hiện tại. Không có sự cố. Sao chép/dán từ msdn: "Đối với cửa sổ con, hMenu chỉ định mã định danh cửa sổ con, giá trị số nguyên được sử dụng bởi điều khiển hộp thoại để thông báo cho phụ huynh về sự kiện." – Tobbe