muszę zwolnić kilka zmian w wybranych bibliotek DLL (proste zmiany wewnętrzne metod - nic, że łamie zgodność według this)VB6 - zwalniając tylko kilka DLL o ciężkie uzależnienie nie łamiąc żadnych odniesień
Więc ogólnie przyjętą metodą jest zachowanie starych bibliotek DLL w osobnym katalogu współdzielonym i podczas tworzenia nowych bibliotek DLL kompilacja ich przy użyciu zgodności binarnej do starego zestawu bibliotek DLL. Robi się to, aby nie zmieniać identyfikatorów GUID podczas rejestrowania moich nowych bibliotek DLL. Te identyfikatory GUID są używane jako odniesienia w innych bibliotekach DLL, które nie zostały zakłócone podczas wydawania.
Teraz, gdy próbuję utworzyć dowolną z nowych bibliotek DLL, pojawia się ostrzeżenie: "Plik DLL lub EXE zawierający bibliotekę binarną zawiera typ parametru lub typ zwracany, którego definicji nie można znaleźć". Jestem pewien, że nie dodałem niczego, aby złamać regułę zgodności binarnej (brak zmian w sygnaturze, publicznych metodach, zmiennych itp.). Czy jestem noobem, nie sprawdzając czegoś podstawowego?
Drapanie głową od rana. Każda pomoc jest doceniana.
EDYCJA: Jeśli w ogóle są zmiany w moim podpisie, Czy istnieje sposób, że mogę wiedzieć bez porównywania kodu?
Możliwe, że twój kod wcześniej złamał kompatybilność. VB6 nie ostrzega, gdy dodajesz nową publiczną metodę lub właściwość, ale kolejne kompilacje tworzą różne typy - ponieważ twoja referencyjna biblioteka DLL nie zawiera jeszcze tej nowej metody. (Często ustawiam kompatybilność biblioteki DLL z samą biblioteką dll.) Myślę (ale nie doświadczyłem), że konkretna wiadomość (... nie można znaleźć definicji) może wskazywać na pewną zmianę w referencjach projektu lub jeśli odinstalowałeś/wyrejestrowałeś jakiś inny składnik z twojego systemu. – Arvo
Binarny cel zgodności używa typów z zewnętrznego typelibu (prawdopodobnie innego projektu VB6), który nie jest poprawnie zarejestrowany na maszynie budującej lub jest nową/starą niekompatybilną wersją. – wqw
@Arvo - Tak, możliwe, że kod został złamany wcześniej. W takim przypadku powinny istnieć co najmniej dwa typeliby (jeden przed przerwą i jeden za później). Ale mój rejestr zawiera tylko jeden – maverick