Giới thiệu
Bài viết này mô tả hotfix khắc phục sự cố sau đây trong Microsoft Visual Studio 2010.
Vấn đề 1
Bạn gặp phải hiện tượng không mong muốn khi bạn chạy ứng dụng có vòng trong mã nguồn. Sự cố này xảy ra nếu mã nguồn được biên dịch với tối ưu hóa toàn cầu (/ Og) cho phép.
Vấn đề 2
Xem xét tình huống sau:
-
Bạn có một dự án Visual C++ bao gồm tệp Atlcomcli.h.
-
Bạn chỉ định các tùy chọn biên dịch /J để xác định các_CHAR_UNSIGNEDmacro trong dự án.
-
Bạn biên dịch dự án.
Trong trường hợp này, bạn nhận được một thông báo lỗi sau:
-
lỗi C2338: CVarTypeInfo < char > không được biên dịch bằng cờ /J hoặc _CHAR_UNSIGNED kích hoạt
-
lỗi C2338: CVarTypeInfo < char * > không biên dịch bằng cờ /J hoặc _CHAR_UNSIGNED hỗ trợ
Vấn đề 3
Một sự vi phạm truy cập xảy ra khi bạn chạy ứng dụng Visual C++ được xây dựng cho x86 dựa trên phiên bản Windows. Sự cố này xảy ra khi ứng dụng có một cây biểu hiện có hai loại mảng nhập tham số.
Nguyên nhân
Nguyên nhân của vấn đề 1
Sự cố này xảy ra do một tối ưu hóa vòng lặp không đúng được thực hiện. Điều này khiến mã không chính xác.
Nguyên nhân của vấn đề 2
Sự cố này xảy ra do tĩnh khẳng định trong tập tin Atlcomcli.h được thiết lập tuỳ chọn /J và CHAR_UNSIGNED macro không chính xác.
Nguyên nhân của vấn đề 3
Sự cố này xảy ra do các đối số trong hướng dẫn nhắc nhở được trộn. Do đó, không đúng đối qua đẩy hướng dẫn.
Thông tin
Thông tin về cập nhật nóng
Microsoft hiện đã cung cấp bản cập nhật nóng được hỗ trợ. Tuy nhiên, nó là nhằm khắc phục chỉ sự cố được mô tả trong bài viết này. Áp dụng cho các hệ thống đang gặp sự cố cụ thể này. Hotfix này có thể được kiểm tra thêm. Vì vậy, nếu bạn không bị ảnh hưởng bởi sự cố này, chúng tôi khuyến nghị bạn đợi cho tới Visual Studio 2010 có chứa hotfix này.
Để giải quyết vấn đề này ngay lập tức, hãy liên hệ với dịch vụ hỗ trợ khách hàng Microsoft để lấy hotfix. Để biết danh sách đầy đủ số điện thoại Dịch vụ hỗ trợ khách hàng của Microsoft và thông tin về chi phí hỗ trợ, ghé thăm website sau của Microsoft:
http://support.microsoft.com/contactus/?ws=supportLưu ý Trong trường hợp đặc biệt, chi phí thường phát sinh cho cuộc gọi hỗ trợ có thể bị hủy bỏ nếu chuyên viên hỗ trợ Microsoft xác định rằng một Cập Nhật cụ thể sẽ giải quyết vấn đề của bạn. Chi phí hỗ trợ thông thường sẽ áp dụng cho các vấn đề không phù hợp với bản Cập Nhật cụ thể trong câu hỏi và câu hỏi hỗ trợ bổ sung.
Điều kiện tiên quyết
Bạn phải có Microsoft Visual Studio 2010 được cài đặt để áp dụng hotfix này.
Yêu cầu khởi động lại
Bạn không phải khởi động lại máy tính sau khi bạn áp dụng hotfix nếu không bị ảnh hưởng tệp đang được sử dụng.
Thông tin thay thế cập nhật nóng
Hotfix này không thay thế bất kỳ hotfix nào khác.
Thông tin về tệp
Phiên bản tiếng Anh của cập nhật nóng này có các thuộc tính tệp (hoặc thuộc tính tệp mới hơn) được liệt kê trong bảng sau. Ngày và giờ của các tệp này được liệt kê theo Giờ Quốc tế Phối hợp (UTC). Khi bạn xem thông tin về tệp, ngày và giờ được chuyển đổi thành giờ địa phương. Để tìm sự khác nhau giữa UTC và giờ địa phương, sử dụng các
Múi giờ
tab trong các
Ngày và giờ
mục trong bảng điều khiển.
Tên tệp |
Phiên bản tệp |
Kích thước tệp |
Ngày |
Giờ |
Nền tảng |
---|---|---|---|---|---|
C2.dll |
16.0.30319.314 |
2,510,144 |
30-May-2010 |
20:48 |
x86 |
C2.dll |
16.0.30319.314 |
2,588,480 |
30-May-2010 |
20:48 |
x86 |
C2.dll |
16.0.30319.314 |
2,630,976 |
30-May-2010 |
20:48 |
x86 |
C2.dll |
16.0.30319.314 |
2,977,600 |
30-May-2010 |
20:48 |
x64 |
C2.dll |
16.0.30319.314 |
7,351,616 |
30-May-2010 |
20:48 |
IA-64 |
Giải pháp
Giải pháp cho vấn đề 1
Để khắc phục vấn đề này, vô hiệu hoá việc tối ưu hóa toàn cầu. Để biết thêm chi tiết về làm thế nào để vô hiệu hoá việc tối ưu hóa toàn cầu, hãy bấm vào số bài viết sau để xem bài viết trong cơ sở kiến thức Microsoft:
216181 sửa CHỮA: sai mã được tạo ra /Og tối ưu hóa
Giải pháp cho vấn đề 2
Để khắc phục vấn đề này, sử dụng sau pragma chỉ bao gồm các tập tin Atlcomcli.h.
#pragma push_macro("ATLSTATIC_ASSERT")
#undef ATLSTATIC_ASSERT
#define ATLSTATIC_ASSERT(x,y)
#include <atlcomcli.h>
#undef ATLSTATIC_ASSERT
#pragma pop_macro("ATLSTATIC_ASSERT")