Posted By: medvidek (Zase za polarnim kruhem) on 'CZprogram' Title: Problem s linkovanim pod windows Date: Mon Dec 9 15:45:07 2002 Tak uz doslo i na windows. Situace je trochu neprehledna, pokusim se ji popsat. Mam aplikaci A prelozenou BCB5 (Borland C++ Builder 5). Aplikace A pouziva dynamickou knihovnu K, ktera je prelozena MSVC6. Knihovna K ma _globalni_ (neexportovanou) instanci tridy, ktera v konstruktoru pres LoadLibrary otvira dynamickou knihovnu L prelozenou MSVC6. Knihovna L pouziva knihovnu ole32.dll. L je slinkovana s ole32.lib, takze L natahuje ole32.dll automaticky pri svem otevreni. A ted mam serii zajimavych pozorovani :) 1. Udelam z K.dll import library K.lib pro BCB, prelozim A, spustim. A loadne automaticky K, K otevre pres LoadLibrary L, ta automaticky otevre ole32.lib a pri otvitrani ole32.lib mam access violation. LoadLibrary zfailuje. 2. Pokud neudelam K.lib, ale otevru v aplikaci A knihovnu K.dll pres LoadLibrary, vse projde (L korektne natahne ole32.dll) Kdybyste mi toto nekdo mohl vysvetlit... Mam jeste dalsi zajimave veci (komu se to zda moc dlouhe a narocne, dal nectete). 3. pokud ta L pouziva ole32.dll, slitne to jen pod XP, pod w2k to jede korektne. Pokud ta L pouziva winsock, slitne to pod obouma OS. 4. V K mam jeden exportovany globalni pointer na rozhrani (struktura obsahujici jen pointery na fce). Udelam vse podle bodu 2, pak pres GetProcAddress ziskam adresu te promenne a zavolam nejakou tu fci. Vysledek - padne to na rypak. 5. Udelam vse jak v bode 4, akorat misto exportovane promenne mam fci, ktera vrati ten pointer. V tomto pripade fci zavolam korektne... Jen doplnim - pokud aplikaci A prelozim v MSVC, jedou vsechny prripady korektne. Jestli nekdo tusite proc to v tom kterem pripade pada, nenechte si to pro sebe :) medvidek -- ELVIRA - Extended LSD VoiceXML interpreter for Applications http://www.fi.muni.cz/lsd/elvira Engine for building dialog applications Free for noncommercial use