2017-08-27 26 views
6

Tôi đang cố gắng lấy các thuộc tính từ một số HWND. Tôi đã sử dụng thông tin từ Using Window Properties, nhưng ví dụ bên dưới không hoạt động đối với tôi. Tôi gặp lỗi khi biên dịch mã của mình.Các thuộc tính Enum HWND C++

đối số kiểu "BOOL (__stdcall *) (HWND hwndSubclass, LPCSTR lpszString, XỬ LÝ hData)" là không phù hợp với thông số của loại "PROPENUMPROCEXW"

Đây là chức năng gọi lại tôi

BOOL CALLBACK PropEnumProcEx(HWND hwndSubclass, LPCSTR lpszString, HANDLE hData) { 
    return TRUE; 
} 

và điều này làm thế nào tôi đang sử dụng nó

EnumPropsEx(hwnd, PropEnumProcEx, NULL); 

Liệu ai đó có bất cứ đề nghị nào về việc làm thế nào điều này có thể được cố định?

+0

Các thông báo lỗi không thể rõ ràng hơn. Bạn có hiểu không –

Trả lời

4

LPCSTR lpszString phải là LPTSTR lpszString. Đối số này sẽ chấp nhận một con trỏ đến chuỗi ANSI hoặc Unicode. PROPENUMPROCEXW cho biết rằng bạn đang xây dựng ứng dụng Unicode để EnumPropsEx macro mở rộng thành cuộc gọi EnumPropsExW để bạn cần phải cung cấp gọi lại chấp nhận chuỗi rộng làm đối số. Thông thường, bạn nên luôn gọi một cách rõ ràng các biến thể Unicode của các hàm API.

Ngoài ra bạn đang thiếu đối số cuối cùng ULONG_PTR dwData.

Vì vậy, gọi lại của bạn sẽ giống như thế:

BOOL CALLBACK 
PropEnumProcEx(HWND hwndSubclass, LPTSTR lpszString, HANDLE hData, ULONG_PTR dwData) 
{ 
    return TRUE; 
} 
+2

** - 1 ** “' LPCSTR lpszString' phải là 'LPTSTR lpszString'” là lời khuyên rất không tốt. Các macro 'T' có thời gian từ năm 1995 đến 2000. Năm 2000 chúng ta có Layer for Unicode, làm cho các macro lỗi thời. Ngày nay, các công cụ của chúng tôi thậm chí không thể tạo ra các tệp thi hành cho các hệ thống, Windows 9x, mà các macro được nhắm mục tiêu. Đó là sự điên rồ để tiếp tục sử dụng chúng cho mã không di sản. –

+0

@ Cheersandhth.-Alf Có thể chấp nhận nếu mã này được cho là được xây dựng trong biến thể ANSI. Và câu trả lời của tôi chứa gợi ý thích sử dụng các biến thể Unicode của các cuộc gọi API. – VTT

+1

@VTT: Không khuyên bạn nên xây dựng như ANSI. Một số độc giả có thể coi trọng bạn. Sau đó, bạn chỉ cần làm cho vấn đề cho họ. Thừa nhận hành vi sai trái. Sửa câu trả lời. –

Các vấn đề liên quan