Ich habe ein paar Änderungen in ausgewählten DLLs freizugeben (einfache Änderungen interne Verfahren - nichts, was die Kompatibilität nach this bricht)VB6 - Freigabe nur wenige DLLs starke Abhängigkeit, ohne irgendwelche Referenzen zu brechen
So ist die Regel Die akzeptierte Methode besteht darin, die alten DLLs in einem separaten freigegebenen Verzeichnis zu verwalten und sie während der Erstellung der neuen DLLs mit Binärkompatibilität zu kompilieren, die auf die alten DLLs festgelegt ist. Dies geschieht, um die GUIDs nicht zu ändern, während ich meine neuen DLLs registriere. Diese GUIDs werden als Referenzen in anderen DLLs verwendet, die ich während der Veröffentlichung nicht gestört habe.
Jetzt, wenn ich versuche, eine der neuen DLL zu machen, erhalte ich eine Warnung: "Die Binärkompatibilitäts-DLL oder EXE enthält einen Parametertyp oder Rückgabetyp, dessen Definition nicht gefunden werden kann." Ich bin mir ziemlich sicher, dass ich nichts hinzugefügt habe, um die Binärkompatibilitätsregel zu brechen (keine Änderung in der Signatur, öffentlichen Methoden, Variablen usw.). Bin ich ein Noob, indem ich etwas Grundlegendes nicht überprüfe?
Kratzen mein Kopf seit dem Morgen. Jede Hilfe wird sehr geschätzt.
EDIT: Wenn überhaupt gibt es Änderungen an meiner Unterschrift, gibt es eine Möglichkeit, die ich kennen kann, ohne Code zu vergleichen?
Es ist möglich, dass Ihr Code früher Kompatibilitätsprobleme hatte. VB6 warnt nicht, wenn Sie eine neue öffentliche Methode oder Eigenschaft hinzufügen, aber nachfolgende Kompilierungen erzeugen unterschiedliche Typelibs - weil Ihre Referenz-DLL diese neue Methode noch nicht enthält. (Ich setze oft Dll-Kompatibilität zu dll selbst.) Ich denke (aber nicht erlebt), dass bestimmte Nachricht (... Definition kann nicht gefunden werden) kann einige Änderungen in Projektreferenzen zeigen oder Sie haben eine andere Komponente deinstalliert/nicht registriert von Ihrem System. – Arvo
Ihr binäres Kompatibilitätsziel verwendet Typen von externer typelib (wahrscheinlich ein anderes VB6-Projekt), das nicht korrekt auf dem Buildcomputer registriert ist oder eine neue/alte inkompatible Version ist. – wqw
@Arvo - Ja, es ist möglich, dass der Code früher brach. In diesem Fall sollte es mindestens zwei typelibs geben (eine für vor der Pause und eine für nach). Aber meine Registrierung enthält nur eine – maverick