2013-08-29 40 views
5

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

App Library dependency diagram

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,

+2

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'. –

Trả lời

0

Có, mã Core và Utils sẽ được sao chép. Thay vì xây dựng chúng như là libs tĩnh bạn có thể xây dựng chúng như dlls và sử dụng bất cứ nơi nào.

1

nếu bạn đi DLL bạn phải đi DLL tất cả các cách, tất cả phụ thuộc xuống c-thời gian chạy. sao chép mã (dấu chân bộ nhớ) không phải là vấn đề tồi tệ nhất. nhớ, bộ nhớ được cấp bởi ứng dụng không thể được giải phóng bởi một dll và ngược lại, trừ khi cả hai đều sử dụng cùng một thời gian chạy (dll).

0

đề xuất của tôi là: chỉ cần giữ mã hóa theo cách của nó, cho đến khi sự cố tăng hoặc nhu cầu cực kỳ cho thay đổi xuất hiện.

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