2009-07-26 30 views
5

OK ..... Tôi đã đọc tất cả các câu hỏi liên quan và một số bài viết MSDN, và về giá trị của một ngày googling.DLL và STL và dữ liệu tĩnh (oh my!)

Câu trả lời "hiện đại" hiện tại cho câu hỏi này:

Tôi đang sử dụng mã VS 2008, C++ không được quản lý. Tôi có một tập tin giải pháp với khá một vài DLL và khá một vài EXE. Miễn là tôi hoàn toàn kiểm soát môi trường xây dựng, sao cho tất cả các phần và phần được xây dựng với cùng cờ, và sử dụng cùng một thư viện thời gian chạy, và không ai có thư viện CRT được liên kết tĩnh, tôi có thể chuyển đối tượng STL không?

Có vẻ như điều này sẽ ổn, nhưng tùy thuộc vào bài viết bạn đọc, có rất nhiều Sợ hãi, Không chắc chắn và Nghi ngờ.

Tôi biết có tất cả các loại vấn đề với mẫu tạo dữ liệu tĩnh đằng sau hậu trường (mọi dll sẽ nhận được bản sao của riêng chúng, dẫn đến đau lòng), nhưng STL cũ là gì?

+0

Lưu ý cách các tệp tiêu đề VS STL ở chế độ có thể ghi; một phím tắt ngẫu nhiên khi trong một tệp tiêu đề như vậy và hệ thống của bạn khác với tất cả các tệp khác! Tôi chia sẻ mối quan tâm ... – xtofl

Trả lời

1

Chúng tôi đã chuyển đối tượng STL thành công trong ứng dụng của chúng tôi được tạo thành từ hàng tá tệp DLL. Để đảm bảo nó hoạt động một trong các thử nghiệm tự động của chúng tôi chạy ở mọi bản dựng là để xác minh cài đặt cho tất cả các dự án. Nếu bạn thêm một dự án mới và cấu hình sai nó, hoặc phá vỡ cấu hình của một dự án hiện có, việc xây dựng không thành công.

Cài đặt chúng tôi kiểm tra như sau. Lưu ý rằng không phải tất cả các vấn đề này đều gây ra vấn đề, nhưng chúng tôi kiểm tra chúng để đảm bảo tính nhất quán.

# định nghĩa

_WIN32_WINNT 
STRICT 
_WIN32_IE 
NDEBUG 
_DEBUG 
_SECURE_SCL 

tùy chọn biên dịch

DebugInformationFormat 
WholeProgramOptimization 
RuntimeLibrary 
6

Miễn là chúng TẤT CẢ sử dụng cùng một phiên bản DLL thời gian chạy chính xác, sẽ không có vấn đề gì với STL. Nhưng một khi bạn xảy ra để có một số xung quanh, họ sẽ sử dụng ví dụ heaps khác nhau - dẫn đến không có kết thúc của những rắc rối.

+0

+1: Tôi làm chính xác những gì Eric H. mô tả và tất cả đều phù hợp với tôi. – RichieHindle

0

Chúng tôi sử dụng bộ sưu tập stl trong ứng dụng của chúng tôi và vượt qua chúng đến và đi từ phương pháp trong dlls khác nhau (thường là tài liệu tham khảo). Điều này không gây ra rắc rối nào.

Khu vực duy nhất mà chúng tôi gặp sự cố là nơi một dll cấp phát bộ nhớ và một dll khác cố xóa nó. Điều này chỉ được báo cáo là xấu, nhưng tôi không chắc chắn tại sao. Tuy nhiên nó chỉ có vẻ là một vấn đề về xây dựng Debug (nơi nó được báo cáo), nhưng vẫn hoạt động trên bản phát hành bản phát hành. Có nói rằng, nơi mà tôi đã đi qua này tôi sửa chữa nó.

Nếu tôi đang viết thư viện của bên thứ ba, tôi sẽ nghĩ hai lần về việc sử dụng tham số stl trong api. Trước đây (VC6), chúng tôi đã phải sử dụng OCI (Oracles C api) như trái ngược với OCCI (Oracles C++ api) bởi vì nó chỉ làm việc với Microsoft STL thực hiện và chúng tôi đã sử dụng stlport. Tất nhiên nếu bạn cho phép khách hàng của bạn để xây dựng thư viện với việc thực hiện stl của riêng họ thì đây không phải là vấn đề.

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