2010-01-06 39 views
5

Tôi đang tạo một ứng dụng C++ sử dụng Qt để tạo GUI. Tuy nhiên, tôi cần phải sử dụng một thư viện của bên thứ ba mà dựa trên MFC (cho CString's, vv). Có anyway để thêm MFC vào ứng dụng của tôi để cho phép tôi sử dụng thư viện này hoặc tôi cần phải viết lại nó bản thân mình?Làm thế nào để thêm hỗ trợ MFC cho dự án Win32 C++ hiện tại?

Tôi đã thấy this question, nhưng nó không cho tôi biết cách thêm MFC theo cách thủ công vào dự án.

Trả lời

3

Nếu ứng dụng thư viện mất/lợi nhuận/sử dụng CStrings nó sẽ cần phải liên kết với các libs MFC, hoặc sẽ có libs MFC đã liên kết tĩnh.

Nếu bạn đang sử dụng Visual studio, bạn chỉ có thể kiểm tra "sử dụng MFc trong lib tĩnh/chia sẻ" nếu thích hợp, nó không ảnh hưởng đến GUI ứng dụng của bạn miễn là bạn giữ điểm nhập chương trình hiện tại của mình.

1

Nếu chỉ dành cho CString (và có lẽ một số chức năng tiện ích khác), bạn có thể tìm kiếm thay thế tốt hơn. Có một số khá nổi xung quanh trên internet.

Ví dụ CString thi này

0

Có, bạn có thể sử dụng MFC bằng cách chọn nó trong tùy chọn biên dịch và liên kết của bạn. Nếu lý do duy nhất của bạn là do thư viện của bên thứ ba thì có thể bạn sẽ không muốn sử dụng bất kỳ tính năng MFC nào trong mã của riêng bạn. Bằng cách đó, nếu bạn thay thế thư viện của bên thứ ba, bạn cũng có thể tắt MFC.

1

Sẽ dễ dàng hơn nhiều nếu bạn có thể tìm thấy thư viện MFC thay thế của bên thứ ba.

Thư viện của bên thứ ba, tĩnh hoặc được liên kết động, sẽ yêu cầu phiên bản MFC giống hệt phiên bản được sử dụng để biên dịch tệp lib của bên thứ ba. Các lớp MFC không tương thích nhị phân giữa các phiên bản và thậm chí không tương thích nhị phân giữa các cấu hình (static/dynamic linked MFC & CRT, CRT đơn/đa luồng, gỡ lỗi, phát hành, X86, X64, MBCS, UNICODE, vv) của cùng một phiên bản .

Nếu bạn sử dụng CString :: LoadString hoặc bất kỳ thứ gì khác truy cập trạng thái mô-đun MFC, nó sẽ yêu cầu CWinApp toàn cầu. Một cách dễ dàng để có được nó là tạo một DLL thông thường. Thêm một vào dự án QT của bạn sẽ yêu cầu bạn phải di chuyển mã từ chức năng nhập xuất cảnh của bạn sang InitInstance và ExitInstance.

0

Nếu chương trình Windows hiện có sử dụng vòng lặp thông báo (thay vì trình xử lý sự kiện riêng biệt được MFC sử dụng), bạn có thể phân lớp cửa sổ ở bất kỳ cấp nào bạn cần xử lý vòng lặp thư đó và ghi đè hàm WindowProc.

Ví dụ: tôi đã lấy chương trình Win32 hiện có và nhúng cửa sổ chính của nó vào cửa sổ hình ảnh CStatic bằng cách thay thế WindowProc của CStatic được phân lớp. Các chức năng của chương trình trước đó đã được chứa trong CStatic, nhưng tôi có thể thêm các điều khiển MFC và mô hình khác vào biên giới xung quanh.

0

Để hỗ trợ thêm MFC để Integra những thay đổi sau là cần thiết:

  1. Thay đổi mục ứng dụng điểm:
    • thường qt điểm vào ứng dụng là chính, cho các ứng dụng MFC điểm vào kỳ vọng là WinMain/wWinMain.
  2. Thêm phụ thuộc MFC yêu cầu (mfc140d.dll/mfc140.dll, v.v ...).
    • Thêm thư mục System32 vào đường dẫn môi trường để tìm phụ thuộc cần thiết.
    • Gói dlls cần khi tạo bộ cài đặt
Các vấn đề liên quan