2008-08-03 37 views
17

Một MFC ứng dụng mà tôi đang cố gắng để di chuyển sử dụng afxext.h, gây _AFXDLL để có được thiết lập, trong đó gây ra lỗi này nếu tôi đặt /MT:Xây dựng cho Windows NT 4.0 bằng Visual Studio 2005?

Vui lòng sử dụng các/MD switch cho _AFXDLL xây dựng

Nghiên cứu của tôi cho đến nay cho thấy không thể xây dựng một ứng dụng để thực thi trên Windows NT 4.0 bằng Visual Studio (C++, trong trường hợp này) 2005.

Điều này có thực sự đúng không? Có cách giải quyết nào không?

+1

Ai đó vui lòng chuyên nghiệp tect này. –

Trả lời

8

Không, có nhiều ứng dụng được xây dựng với VS2005 phải hỗ trợ Windows XP, 2000, NT, toàn bộ ngăn xếp. Vấn đề là (theo mặc định) VS2005 muốn sử dụng thư viện/xuất khẩu không có trên NT.

Xem this thread cho một số nền.

Sau đó, bắt đầu hạn chế phụ thuộc của bạn thông qua các macro tiền xử lý và tránh các API không được hỗ trợ trên NT.

+0

Điều làm cho vấn đề này gây nhầm lẫn là nếu bạn liên kết tĩnh, chỉ các tệp đối tượng cần thiết cho các ký hiệu bạn sử dụng thực sự được kéo vào, đó là lý do tại sao nó xuất hiện để hoạt động trên NT4 hầu hết thời gian. –

4

Để loại bỏ lỗi _AFXDLL, bạn đã thử thay đổi cài đặt để sử dụng MFC dưới dạng lib tĩnh thay vì DLL chưa? Điều này tương tự như những gì bạn đã làm trong việc thay đổi libs thời gian chạy thành tĩnh thay vì DLL.

1

Mặc dù tôi không quen thuộc với afxext.h, tôi tự hỏi những gì về nó làm cho nó tương thích với Windows NT4 ....

Tuy nhiên, để trả lời câu hỏi ban đầu: "Nghiên cứu của tôi cho đến nay chỉ rằng nó là không thể xây dựng một ứng dụng để thực hiện trên Windows NT 4.0 bằng cách sử dụng Visual Studio (C++, trong trường hợp này) 2005. "

Câu trả lời phải là có, đặc biệt nếu ứng dụng ban đầu được viết hoặc chạy trên NT4! Với điều afxext.h sang một bên, điều này phải là một YES dễ dàng.

Điều khác mà tôi đang gặp khó khăn là bản chất lỏng lẻo trong đó mọi người đang vứt bỏ thuật ngữ NT. Cấp cho hầu hết mọi người nghĩ về 'NT' như Windows NT4 nhưng nó vẫn còn mơ hồ vì 'hầu hết mọi người' không bằng 'tất cả mọi người'.

Thực tế thuật ngữ 'NT' bằng NT series. Dòng NT là NT3, NT4, NT5 (2000, XP, 2003) và NT6 (Vista).

Win32 là một hệ thống phụ mà bạn cũng nhắm mục tiêu mã C/C++ của mình. Vì vậy, tôi thấy không có lý do tại sao ta không nên có thể nhắm mục tiêu nền tảng NT4 này & hệ thống phụ hoặc, nếu đây là một nền tảng porting excercise, loại bỏ các phụ thuộc MFC mà VC có thể áp đặt.

Thêm afxext.h vào danh sách kết hợp, âm thanh với tôi giống như sự cố tương thích với hệ thống phụ. Đó là một phần của MFC từ nghiên cứu của Google của tôi. Afxext.h dường như là phần mở rộng MFC (Microsoft Foundation Class).

Bạn có thể xóa phụ thuộc của mình trên MFC không? Loại ứng dụng này là gì? (CLR, dịch vụ, giao diện GUI?) Bạn có thể chuyển đổi dự án thành một dự án C++ không được quản lý trong VC 8.0 không?

Hy vọng rằng một số điều này sẽ giúp bạn.

3

Cách giải quyết là khắc phục DLL đa luồng. Simple instructions.tóm tắt ngắn gọn:

Các vận chuyển 8,0 C Runtime Library DLL (msvcr80.dll) không hỗ trợ NT 4.0 SP6 vì một lý do và một lý do duy nhất: một người nào đó tại Microsoft bổ sung một ghé chức năng để GetLongPathNameW mà không tồn tại trong kernel32.dll trên NT 4.0.

CRTLIB.C Trên đường 577, có cuộc gọi đến GetLongPathNameW. chỉ cần thay thế bằng: ret = 0; chỉ sử dụng bản dựng này của MSVCR80.DLL trên NT 4.0.

Khi bạn đã làm việc đó, hãy tìm ra giải pháp chung chung hơn sẽ không đáng kể.

-1

Ý tưởng là exe là cần thiết để liên kết đến thư viện tĩnh.

Hãy thử điều này "Thuộc tính cấu hình", "Chung", "Sử dụng MFC" để "Sử dụng MFC trong Thư viện tĩnh" "Thuộc tính cấu hình", "Chung", "Sử dụng ATL" để "Liên kết tĩnh để ATL"

"Configuration Properties", "C \ C++", "Code Generation", "Runtime Library" để "Multi-Threaded (\ MT)"

Kiểm tra vBulletin Build Machine: Visual Studio 2005 trên Window XP SP2 Máy khách: Cửa sổ XP SP2 (không cài đặt VS2005)

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