Tôi vừa thực hiện việc này với trình biên dịch MS Visual Studio. Chúng tôi đã chuyển đổi một số dự án kế thừa từ các tệp DLL thành các thư viện tĩnh. Một vài trong số các DLL này có tài nguyên hộp thoại hoặc chuỗi được nhúng trong chúng. Tôi đã có thể biên dịch các tập lệnh .RC cho các tệp DLL này vào ứng dụng chính của chúng tôi bằng cách đưa chúng vào tệp tập lệnh RC của ứng dụng chính thông qua cơ chế "TEXTINCLUDE". Tôi tìm thấy nó dễ nhất để làm điều này bằng cách chỉnh sửa các tập tin RC trực tiếp, nhưng Visual Studio cung cấp một chút "wizardy" cơ chế là tốt. Việc triển khai có nhiều khả năng khác nhau trong các trình biên dịch khác.
Để thao tác RC kịch bản chính trực tiếp:
.1. Trong phần "2 TEXTINCLUDE", bao gồm tệp tiêu đề xác định ID tài nguyên cho thư viện của bạn. Cú pháp là
2 TEXTINCLUDE
BEGIN
"#include ""my_first_lib_header.h""\r\n"
"#include ""my_second_lib_header.h""\0"
END
.2. Trong phần "3 TEXTINCLUDE", bao gồm tập lệnh RC từ thư viện của bạn.
3 TEXTINCLUDE
BEGIN
"#include ""my_first_library.rc""\r\n"
"#include ""my_second_library.rc""\0"
END
Bước 3 và 4 sẽ tự động diễn ra, nhưng tôi thấy đáng tin cậy hơn khi chỉ nhập chúng, thay vì phụ thuộc vào trình biên dịch tập lệnh tài nguyên của Microsoft để xử lý mọi thứ.
.3. Thêm tệp tiêu đề với tài nguyên thư viện của bạn xác định danh sách ký hiệu chỉ đọc. Danh sách này thường nằm gần đầu tệp.
#define APSTUDIO_READONLY_SYMBOLS
#include "my_first_lib_header.h"
#include "my_second_lib_header.h"
#undef APSTUDIO_READONLY_SYMBOLS
.4. Bao gồm tập lệnh RC của thư viện của bạn trong phần APSTUDIO_INVOKED. Điều này thường ở cuối tệp.
#ifndef APSTUDIO_INVOKED
#include "my_first_library.rc"
#include "my_second_library.rc"
#endif
Bạn cũng có thể làm tất cả điều này tự động thông qua IDE visual studio, nhưng tôi thấy nó không luôn luôn áp dụng khi tôi mong đợi nó đến.
- Mở cửa sổ "Chế độ xem tài nguyên" trong Visual Studio.
- Nhấp chuột phải vào tệp tài nguyên của ứng dụng chính của bạn và chọn "Bao gồm tài nguyên ..." từ trình đơn ngữ cảnh.
- Trong hộp có nhãn "Chỉ thị biểu tượng chỉ đọc", hãy thêm câu lệnh bao gồm cho tệp .h xác định ID tài nguyên cho thư viện của bạn.
- Trong hộp có nhãn "Chỉ thị thời gian biên dịch", hãy thêm câu lệnh bao gồm cho tập lệnh .rc của thư viện của bạn.
- Nhấp vào OK. Bạn cũng có thể muốn kích hoạt trình biên dịch tập lệnh RC theo cách thủ công, để đảm bảo nó xảy ra.
Nếu kịch bản tài nguyên của thư viện của bạn tham chiếu bất kỳ tập tin trên đĩa (file văn bản, biểu tượng tập tin, vv), bạn sẽ cần phải chắc chắn rằng các dự án ứng dụng chính biết nơi để tìm thấy chúng. Bạn có thể sao chép các tệp này vào một nơi nào đó mà ứng dụng của bạn có thể tìm thấy chúng hoặc bạn có thể thêm một đường dẫn bổ sung bao gồm trong các thiết lập trình biên dịch.
Để thêm một bổ sung bao gồm đường dẫn:
- Mở hộp thoại thuộc tính cho các ứng dụng chính của bạn.
- Chọn "Thuộc tính cấu hình/Tài nguyên/Chung" từ ngăn điều hướng bên trái.
- Trong danh sách thuộc tính, hãy nhập bất kỳ đường dẫn thích hợp nào bên cạnh "Thư mục bao gồm bổ sung".
Tôi đã thực sự thực hiện lựa chọn của bạn 2, và nó không phải là tất cả những gì khó khăn. Bạn cũng cần phải xây dựng một trình phân tích cú pháp cho định dạng tệp .res, cũng được ghi lại và không quá khủng khiếp. – slicedlime
@Roger Lipscombe Bạn có thấy bất kỳ lý do gì khiến câu trả lời của Dimitri C. không phải là một ý tưởng hay không? – DataGraham
Vì tệp .RES cần đảm bảo rằng nó không xung đột với ID tài nguyên. # 3 của tôi có cùng một vấn đề, ngoại trừ việc bạn có thể giảm thiểu nó với một số ma thuật tiền xử lý. Bạn không thể làm điều này với câu trả lời của Dimitri. –