tôi có giải pháp của tôi cho ứng dụng của tôi thiết lập theo cách sau dll - (tôi đang sử dụng Visual Studio và đây là một VC++ Dự án)exe và chia sẻ các thư viện tĩnh cùng
LƯU Ý: các dự án xanh được biên dịch thành các thư viện tĩnh.
như bạn có thể thấy, exe và dll chia sẻ một số thư viện tĩnh (core.lib và utils.lib) và exe in-turn sử dụng DLL (thông qua "thời gian tải liên kết động" bằng cách sử dụng thư viện nhập).
câu hỏi của tôi là thiết lập phụ thuộc chính xác phải không? vấn đề tôi thấy là, khi ứng dụng này được thiết lập và chạy, sẽ có một số mã trùng lặp trong không gian địa chỉ quy trình phải không? có nghĩa là, tất cả các chức năng có trong Core.lib và Utils.lib sẽ xuất hiện hai lần phải không? cos, các Exe và DLL sẽ có mã này được biên dịch riêng biệt vào chúng.
nếu có, một cách để giải quyết vấn đề trên là chuyển mã độc quyền thành dll hoặc giữ trong exe và chia sẻ nó (b/w exe và dll) thông qua nhập/xuất. nhưng tôi có nhiều đối tượng lớp trong lõi và utils và tôi không thích ý tưởng xuất/nhập các đối tượng lớp này (bằng cách thêm __declspec (dllimport/dllexport)) vào tệp tiêu đề và bên cạnh đó tôi có thể kết thúc việc này đối tượng lớp học
đây là sự hiểu biết của tôi và tôi có thể sai. xin đề nghị sửa chữa và cách tiếp cận thông thường theo sau để đối phó với những vấn đề như vậy là gì?
Kính trọng,
Tôi gặp vấn đề này và quyết định rằng, miễn là mã trùng lặp tương đối nhỏ, điều này có thể chấp nhận được. Nếu mã trùng lặp là đáng kể, sau đó bạn nên bó nó như một thư viện được chia sẻ thay vì ... nhưng sau đó bạn có khả năng chạy vào địa ngục phụ thuộc nếu 'Algo-DLL' mong đợi một phiên bản khác của thư viện hơn là' App'. –