Posted By: pivson (Pijte pivo, je zdrave !!!) on 'CZprogram'
Title: Re: Problem s linkovanim pod windows
Date: Tue Dec 10 12:47:35 2002
> 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.
Co bys cekal ?
>
> 5. Udelam vse jak v bode 4, akorat misto exportovane promenne mam fci, ktera
> vrati ten pointer. V tomto pripade fci zavolam korektne...
Tak tak...
Exporotvani promennych neni uplne standardni vec, takze byt tebou se tim
nezaobiram. Pravdepodobne ma loader bordel v segmentech, pripadne spatne
nastavi 'rwx' prava, ci neco podobneho. To by se dalo odsledovat - jesli te
to moc zajima, stahni si kernel debuging, zapni si to a 'krokuj' loadlibrary.
Pri tom koukej, co ti vypisuje za debug veci.
Dalso moznost - neni schopen relokovat 'pozici' promenne, ci odbdobu. Zkus si
udelat base adresy tak, aby je loader nemusel vubec relokovat.
> Jen doplnim - pokud aplikaci A prelozim v MSVC, jedou vsechny prripady
> korektne.
Co bys cekal :))) ? CBuilder ma okolo sebe tuny blbosti, asi jako kdyz udelas
aplikaci s MFC, ale 10x horsi. Tezko muzes hadat 'jak' si inicializuje
globalni promenne, jak vola konstruktory, ... Kazdy z kompileru ma tohle sve
'zpusoby'. Pokud je chces prinutit 'importovat' promenou, pak je otazka, jak
se k tomu kompiler zachova. Bude to jen 'pointer' ? Nebo to bude pointer to
tabulky pointeru ? (aby nemusel relokovat celej kod po natahnuti DLL). Takze
problem dle mne bude v rozdilnem pristupu. Takze se nechovej jako cune a
exportuj si funknce, ktere jsou standardizovane :o)
Ps: obdobny problem je i s prilinkovavanim DLL funkci, pokud by si sel vice
do hloubky... Napr. v Debug buildu MSC (aby se vyhnul relokovani a umoznil
edit & continue) tak veskere tridni FCE jsou ve skutecnosti skoky do
tabulky... A tak se da pokracovat...
Pivson
--------------------------------------------------------------------------
In the 1960s you needed the power of two C64s to get a rocket
to the moon. Now you need a machine which is a vast number
of times more powerful just to run the most popular GUI.