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.

Search the boards