Tôi đang cố gắng bật các điều khiển chung trong một ứng dụng. Tôi đã làm theo các bước được nêu trong this MSDN article, cụ thể là phần Using ComCtl32.dll Version 6 in an Application That Uses Only Standard Extensions. Nhưng tôi không thể làm cho nó hoạt động được.Cách bật các điều khiển chung trong ứng dụng Windows
Điều duy nhất tôi đang làm khác với bài viết là tôi thêm thông tin tệp kê khai trong Trang thuộc tính dự án | Thuộc tính cấu hình | Linker | Tệp kê khai | Phụ lục kê khai bổ sung. Đây là nội dung tôi nhập vào hộp văn bản:
"type = 'Win32' name = 'Microsoft.Windows.Common-Controls' version = '6.0.0.0' processorArchitecture = '*' publicKeyToken = '6595b64144ccf1df' language = '*' xmlns = 'http://schemas.microsoft.com/developer/msbuild/2003' ";% (AdditionalManifestDependencies)
Khi tôi kiểm tra tệp kê khai đã tạo (MyApp.exe.intermediate.manifest), có vẻ chính xác.
Tôi cũng thêm phụ thuộc liên kết vào ComCtl32.lib trong Thuộc tính dự án | Thuộc tính cấu hình | Linker | Đầu vào | Phụ thuộc bổ sung. Tôi cũng gọi InitCommonControlsEx lúc khởi động với cấu trúc INITCOMMONCONTROLSEX khởi tạo như thế này:
INITCOMMONCONTROLSEX icex;
icex.dwSize = sizeof(INITCOMMONCONTROLSEX);
icex.dwICC = ICC_STANDARD_CLASSES;
Nhưng cuộc gọi đến InitCommonControlsEx luôn trả về FALSE (có nghĩa là nó đã thất bại). Sau khi điều tra, tôi phát hiện ra rằng mã lỗi được trả về từ GetLastError là ERROR_FILE_NOT_FOUND. Điều gì có thể là vấn đề?
CẬP NHẬT: Tôi nhận thấy điều gì đó có thể liên quan đến "lỗi không tìm thấy tệp". Khi tôi chạy ứng dụng từ trình gỡ lỗi, một trong những dòng trong cửa sổ Output là:
'MyApp.exe': Loaded 'C: \ Windows \ winsxs \ x86_microsoft.windows.common-controls_6595b64144ccf1df_5.82.6002. 18305_none_88f3a38569c2c436 \ comctl32.dll', không thể tìm thấy hoặc mở các tập tin PDB
Tuy nhiên, có một loạt các dòng tương tự đối với một số các thư viện chuẩn giống như kernel32.lib, user32.lib, vv:
'MyApp.exe': Đã tải 'C: \ Windows \ System32 \ ntdll.dll', Không thể tìm hoặc mở PDB nộp
'MyApp.exe': Loaded 'C: \ Windows \ System32 \ kernel32.dll', không thể tìm thấy hoặc mở file PDB
'MyApp.exe': Loaded 'C: \ Windows \ System32 \ msvcrt.dll', không thể tìm thấy hoặc mở các tập tin PDB
'MyApp.exe': Loaded 'C: \ Windows \ System32 \ user32.dll', không thể tìm thấy hoặc mở PDB nộp
Những dòng này luôn xuất hiện cho bất kỳ ứng dụng nào và nó không gây ra vấn đề gì. Nó có thể khác với ComCtl32.dll không?
Vì vậy, tôi sẽ đặt câu hỏi rõ ràng. Tính năng này có hoạt động * nếu không * thông tin tệp kê khai được thêm theo cách thủ công không? – WhozCraig
@WhozCraig Đã thử, không hoạt động. – user1610015
Bạn có cân nhắc việc gọi InitCommonControls() (không phải là Ex verson) làm dòng đầu tiên của WinMain hay không. Nó sẽ không hoạt động? Hay bạn đang cố gắng để có được một trong những phong cách hình ảnh mới hơn? – selbie