2010-04-19 33 views
16

Tôi có một DLL rất đơn giản được viết bằng C++ không được quản lý mà tôi truy cập từ ứng dụng của mình. Gần đây tôi chuyển sang Visual Studio 2010, và DLL đã đi từ 55k xuống 35k mà không có thay đổi mã, và bây giờ nó sẽ không còn tải trong Windows 2000. Tôi không thay đổi bất kỳ cài đặt mã hoặc trình biên dịch nào. Tôi có thiết lập xác định cho 0x0500, bao gồm hỗ trợ Windows 2000. Có ai khác chạy vào điều này, hoặc có bất kỳ ý tưởng nào về những gì tôi có thể làm không?Sự cố khi sử dụng Visual Studio 2010 đã biên dịch C++ DLL trong Windows 2000

+0

bản sao có thể có của [Tôi có thể sử dụng trình biên dịch C++ của Visual Studio 2010 với Thư viện thời gian chạy C++ của Visual Studio 2008 không?] (Http://stackoverflow.com/questions/2484511/can-i-use-visual-studio-2010s-c -compiler-with-visual-studio-2008s-c-runtime) – Suma

Trả lời

12

Visual Studio 2010 cannot build binaries that run on Windows 2000. Nó thậm chí còn tệ hơn thế, they won't run on Windows XP RTM or Windows XP Service Pack 1 either. Điều này là do thư viện runtime của VS2010 yêu cầu API EncodePointer không có sẵn cho đến SP2.

Dường như bạn đang mắc kẹt khi xây dựng với cài đặt VS2008 nếu bạn muốn hỗ trợ các phiên bản trước của Windows. Bạn có thể di chuyển toàn bộ dự án của bạn sang Visual Studio 2008 hoặc bạn có thể nhắm mục tiêu các bộ công cụ vc90 (Visual Studio 2008) từ bên trong các dự án Visual Studio 2010 của bạn. Để biết thêm chi tiết về phương pháp thứ hai, hãy xem anwser này cho câu hỏi liên quan của tôi here.

+0

Cảm ơn bạn đã liên kết, đó là một số tin tức đáng tiếc. :( –

+0

@Jon Tackabury: Tôi biết - Tôi thực sự thực sự muốn sử dụng 'auto': ( –

+0

Tôi chỉ không muốn có VS 2008 và 2010 cả hai cài đặt. :( –

5

Giải pháp có thể là cung cấp EncodePointer (và DecodePointer, rõ ràng) trong một lib riêng biệt và liên kết ưu tiên cho KERNEL32.LIB. Đây là một kịch bản được hỗ trợ hoàn hảo. Trong quá khứ, libs như "LIBCTINY" và "UNICOWS" đã sử dụng cơ chế liên kết ưu tiên này để thêm/thay thế được chọn nhưng không phải tất cả các chức năng từ một lib khác.

+0

Chính xác, không may Tôi không xem câu trả lời của bạn trước khi viết câu trả lời của riêng tôi trong chủ đề được liên kết, nếu không tôi sẽ không dành nhiều thời gian erimenting với nó. Tuy nhiên, như câu trả lời của tôi có sẵn sàng để sử dụng và kiểm tra mã, tôi hy vọng nó có thể được sử dụng một số - xem http://stackoverflow.com/questions/2484511/can-i-use-visual-studio-2010s-c-compiler -with-visual-studio-2008s-c-runtime/3502056 # 3502056 – Suma

+0

Một lưu ý quan trọng: bạn không cung cấp EncodePointer/DecodePointer (các hàm từ DLL) trực tiếp. Bạn cần phải thay thế các vectơ nhập của chúng, đó là những gì được giải quyết khi thích .lib. Chúng được gọi là _imp__FunctionName. – Suma

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