2013-04-02 29 views
5

tôi phải phát hành một vài thay đổi trong DLL chọn (thay đổi đơn giản nội bộ với các phương pháp - không có gì mà phá vỡ khả năng tương thích theo this)VB6 - phát hành chỉ có một vài DLL có sự phụ thuộc nặng nề mà không vi phạm bất kỳ tài liệu tham khảo

Vì vậy, nói chung phương pháp được chấp nhận là duy trì các tệp DLL cũ trong một thư mục chia sẻ riêng biệt và trong khi tạo các tệp DLL mới, biên dịch chúng với khả năng tương thích nhị phân được đặt thành bộ tệp DLL cũ. Điều này được thực hiện để không thay đổi GUID trong khi tôi đăng ký các DLL mới của mình. Các GUID này được sử dụng làm tài liệu tham khảo trong các DLL khác mà tôi không bị quấy rầy trong khi phát hành.

Bây giờ, khi tôi cố gắng tạo bất kỳ DLL mới nào, tôi nhận được cảnh báo: "DLL tương thích nhị phân hoặc EXE chứa kiểu tham số hoặc kiểu trả về có định nghĩa không thể tìm thấy". Tôi khá chắc chắn tôi đã không thêm bất cứ điều gì để phá vỡ các quy tắc tương thích nhị phân (Không có thay đổi trong chữ ký, phương pháp công cộng, biến vv). Tôi có phải là một noob bằng cách không kiểm tra một cái gì đó cơ bản?

Gãi đầu của tôi từ sáng. Bất kỳ sự giúp đỡ nào cũng được đánh giá cao.

CHỈNH SỬA: Nếu có thay đổi về chữ ký của tôi, có cách nào tôi có thể biết mà không cần so sánh mã không?

+1

Có thể mã của bạn đã phá vỡ tính tương thích trước đó. VB6 không cảnh báo, khi bạn thêm bất kỳ phương thức hoặc thuộc tính công khai mới nào, nhưng các biên dịch tiếp theo tạo các typelib khác nhau - vì DLL tham chiếu của bạn không chứa phương thức mới này. Tôi nghĩ (nhưng không có kinh nghiệm) rằng thông điệp cụ thể (... định nghĩa không thể được tìm thấy) có thể cho thấy một số thay đổi trong tài liệu tham khảo dự án hoặc bạn đã gỡ cài đặt/không đăng ký một số thành phần khác từ hệ thống của bạn. – Arvo

+2

Mục tiêu tương thích nhị phân của bạn sử dụng các loại từ typelib bên ngoài (có thể là một dự án VB6 khác) không được đăng ký đúng trên máy xây dựng hoặc là phiên bản không tương thích mới/cũ. – wqw

+0

@Arvo - Có thể mã đã bị hỏng trước đó. Trong trường hợp đó, phải có ít nhất hai typelib (một cho trước khi nghỉ và một cho sau). Nhưng đăng ký của tôi chỉ chứa một số – maverick

Trả lời

2

Lấy các tệp DLL cũ của bạn và thêm tiền tố compat_ cho chúng.

Đổi tên cơ bản tệp MyAppDataAccess.dll của bạn thành compat_MyAppDataAccess.dll.

Bây giờ hãy chuyển đến các thuộc tính của ActiveX DLL và đặt dự án của bạn thành có khả năng tương thích nhị phân với compat_MyAppDataAccess.dll mới, như dưới đây.

Bây giờ, chỉ cần tạo tệp DLL của bạn và triển khai nó.

Nó sẽ hoạt động. Nếu, trên thực tế, khả năng tương thích nhị phân của bạn sẽ bị hỏng do các thay đổi của bạn, sau đó bạn sẽ nhận được cảnh báo nêu rõ điều đó.

enter image description here

+0

Sẽ không giống như tham khảo cùng một DLL cho chính nó? Không chắc đó có phải là cách hay hay không. Âm thanh kinh khủng. Tôi sẽ không phải đăng ký cả hai? – maverick

+0

Về cơ bản, có, nhưng tại sao nó lại đáng sợ? Bạn sẽ không phải đăng ký cả hai. 'Compat_' chỉ có để cung cấp khả năng tương thích nhị phân - bạn không phải phân phối nó. Tôi có một loạt các ứng dụng VB6 có một tấn phụ thuộc thư viện và đây là một cách duy nhất để đảm bảo rằng các thư viện không phá vỡ khả năng tương thích nhị phân. – AngryHacker

+0

Ok! Những công việc này. Tôi đã tạo một thư mục riêng cho các DLL tương thích của tôi ở một vị trí được chia sẻ. Chấp nhận câu trả lời vì nó đã giải quyết được vấn đề của tôi. Cảm ơn – maverick