Được cung cấp: Sử dụng dll thực thi. Chúng có thời gian chạy c/C++ khác nhau. Những hạn chế nào tồn tại trong giao diện giữa chúng? Bên cạnh đó, họ sử dụng cùng một trình biên dịch, phiên bản Boost tương tự (nhưng các libs được biên dịch sẵn khác nhau).giao diện giữa exe và dll với thư viện thời gian chạy C/C++ khác nhau
Tôi hiểu rằng thời gian chạy khác nhau có thể có các vùng khác nhau. Vì vậy, xóa phải tương ứng với mới từ cùng một đống.
Quan trọng nhất là chúng tôi không thể chuyển qua đối tượng STL giao diện vì khi chúng tôi xây dựng đối tượng STL exe được liên kết với một thời gian chạy và khi xây dựng dll cùng một đối tượng (nếu chúng ta chuyển nó bằng tham chiếu hoặc sao chép qua giao diện) sẽ được liên kết với thời gian chạy khác. Và một thời gian chạy khác có thể có cách triển khai khác nhau của đối tượng đó.
Hãy xem xét trường hợp:
Tôi nghĩ rằng đây là an toàn. Hàm xuất dll có tham số: tham chiếu đến lớp được người dùng định nghĩa xuất khẩu có chứa lớp STL riêng tư làm thành viên. Dll phân bổ bộ nhớ cho đối tượng này. Exe gọi phương thức Release của đối tượng này khi muốn xóa nó.
Tôi nghĩ những điều sau KHÔNG an toàn. Lớp người dùng định nghĩa được khởi tạo trong exe và được truyền qua giao diện exe/dll. Lớp này chứa lớp STL riêng tư làm thành viên. exe và dll chia sẻ các tiêu đề/tệp triển khai của lớp người dùng này. Khi lớp này được xây dựng trong các dự án riêng biệt, việc triển khai STL khác nhau sẽ được sử dụng. Ví dụ thực hiện khác nhau của chuỗi :: size() (từ các thời gian chạy khác nhau) sẽ được áp dụng cho cùng một đối tượng trong bộ nhớ.
Tôi nghĩ những điều sau đây là an toàn. Lớp người dùng định nghĩa được khởi tạo trong exe và được truyền qua giao diện exe/dll. Lớp này không phụ thuộc vào thư viện Chuẩn, nó chỉ sử dụng các kiểu C++ nguyên thủy. exe và dll chia sẻ các tiêu đề/tệp triển khai của lớp người dùng này. Ngoài ra chúng ta phải kiểm soát mới và xóa tương ứng với cùng một đống. Ví dụ, chúng tôi có thể quá tải mới/xóa để họ sử dụng :: GetProcessHeap.
Tôi nghĩ những điều sau đây KHÔNG an toàn: chuyển các đối tượng tăng cường thông qua giao diện exe/dll vì chúng có thể phụ thuộc vào các lớp thư viện chuẩn. Cũng xóa có thể không tương ứng với heap mới. Tôi nghĩ rằng sau đây là không an toàn: ngay cả khi chúng tôi vượt qua các đối tượng tăng thông qua giao diện exe/dll và họ không phụ thuộc vào các lớp thư viện chuẩn nhưng không được thực hiện như là tiêu đề chỉ - hơn đối tượng có thể được tạo ra với một thúc đẩy lib (cho một thời gian chạy) và được sử dụng với một lib tăng (cho một thời gian chạy khác). Cũng xóa có thể không tương ứng với heap mới.
Ngoài ra tôi muốn sử dụng một số hương vị của con trỏ thông minh để chuyển tham chiếu đến các đối tượng (được đề cập trong mục 3) từ exe sang dll và từ dll sang exe. Tôi nghĩ con trỏ thông minh này cũng nên quá tải mới/xóa để phân bổ bộ đếm tham chiếu từ heap quá trình mặc định. Khi nó sẽ cố gắng xóa đối tượng nhọn nó sẽ gọi xóa rằng quá tải bởi đối tượng này (như trong mục 3)
Đối với các đối tượng từ mục 1 Tôi muốn sử dụng con trỏ thông minh tùy chọn gọi phương thức phát hành của đối tượng nhọn (như boost :: shared_ptr với bản phát hành tùy chỉnh)
Vấn đề nào không được đề cập? Hãy sửa tôi.