This is an old revision of the document!


Održavanje kompatibilnosti COM interfejsa u VB6 projektima

Greška označava narušavanje kompatibilnosti na nivou fajla koji bi trebao kompatibilnost da održava.

Kako se rešava ?

1. Ako zvirnemo u TypeLib (i uvek samo tamo) u potrazi za potrebnom bibliotekom (npr. BLRManufSif.dll) videćemo da je tamo registrovane više verzije: x.a, x.b i x.c. X.C je najnovija.

2. Pogledamo isti ključ na MSRV i vidimo da je tamo samo najnovija verzija X.C.

3. Obrišemo “viškove” u registru u kom smo ih našli (x.a i x.b)

4. Guala ! Problem sa DLL kompatibilnosti rešen !

Zašto ?


Pretpostavimo da je CopyOf.. nastao u doba dok je bila aktuelna verzija X.Aneke komponente od koje zavisimo. U međuvremenu verzija se popela na X.Ckoji nije sasvim kompatibilna sa X.A. Šta će se desiti ?

DLL za održanje kompatibilnosti pokušava da nađe otisak revizija X.A i ako u tome uspe uporediće ga sa sadašnjim i utvrditi da ne valja. Kako je to neočekivano, i poruka je blesava.
Onda se ja dosetim i obrišem iz registra podatak da je uopšte registrovana X.Averzija. Sada se DLL pali, gleda u registru da li postoji X.A, vidi da nema, pa onda kako ima instrukciju da traži novije verzije, pronalazi X.C. Njegov otisak uspešno upoređuje sa tekućom registracijom i sadržajem DLL-a i sve je u redu.

Ukratko…grešku ovog tipa “DLL or OCX compatibility can't find…bla,bla…” po pravilu možeš rešiti na ovaj način.


Šta još može da se nađe ?

Ovo nije opasno jer je GUID drugačiji, ali ponekad se može desiti da u potrazi za DLL-om, po imenu, naiđeš na “ostatak” stare registracije. Obično će verzija biti znatno manja od tekuće, kažem, i GUID će biti drugačiji, ali može da zbuni.
Da bi bio siguran da se radi o “duhu”, obrišeš podatak o registraciji (samo verziju) ponovo registruješ komponentu i proveriš da li se podatak o registraciji vratio. Ako nije, obrišeš ceo ključ.

  • kb/com_compatibility_issues_vb6.1383663917.txt.gz
  • Last modified: 2013/11/05 15:05
  • (external edit)