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