Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
Marek

Založen: 28. 07. 2007 Příspěvky: 1782 Bydliště: Velká Morava
|
Zaslal: 7. říjen 2011, 15:22:26 Předmět: |
|
|
To je asi tím, že staticky linkované funkce mají v MSVC jiný prefix než ty dynamicky linkované. Zatímco staticky linkované mají asi jen "_", ty dynamicky linkované mají "_imp_" nebo něco takového. _________________ AMD Open Source Graphics Driver Developer |
|
Návrat nahoru |
|
 |
frca

Založen: 28. 07. 2007 Příspěvky: 1561
|
Zaslal: 7. říjen 2011, 18:32:22 Předmět: |
|
|
A co funkce LoadLibrary, GetProcAddress a spol.? Ty by nešly použít? _________________ www.FRANTICWARE.com |
|
Návrat nahoru |
|
 |
Al
Založen: 23. 10. 2007 Příspěvky: 196
|
Zaslal: 9. říjen 2011, 18:54:39 Předmět: |
|
|
Yossariane, měl bys být opatrnější v označování vysvětlujících příspěvků za bláboly apod. Nepsal jsem žádné nesmysly, Eosie to dovysvětlil podrobněji. Volací model to není jen "pořadí parametrů na zásobníku", jak se učí v prvním semestru assembleru. C++ používá dekorování jmen včetně parametrů, C bez parametrů. Obojí je nutné z definice těch jazyků. A i tak se to může lišit, třeba Watcom C (to je takovej ten slavnej překladač s DOS4GW, co se v něm dělala většina her pro DOS v 90.letech) dekoruje proměnné podtržítkem na konci názvu, zatímco většina jiných překladačů dává podtržítko na začátek názvu. Možná jako "nejpřenositelnější" by asi měl být volací model WINAPI, čili ten, který používá Windows. Každý překladač ho určitě podporuje, aby mohl volat funcke Windows, a budeme tam mít jistotu, že se nám to dekorování jmen nebude lišit u různých překladačů či jazyků.
A co se týče toho Eosie, který mě taky nedokázal hned neurazit, proč v H souborech není víc věcí k importu DLL, fakt není úponě jasné. Nikdy jsem to ale nepropagoval, jen konstatuji, že je něco nejasné. Sice jako chápu, že purista musí hned křičet, že věci týkající se linkování a né překladu, přece logicky nemůžou být zadávané na úrovni zdrojáku, ale tohle je fakt jen teorie puristy. Ve skutečnosti Microsoft cpe do zdrojáků celou řadu jiných věcí, které tam nepatří a měly by být až u linkování, tak by tam mohl nacpat i tohle. Vlastně samotné příznaky DLL import/export jsou příkladem, při práci s COM modelem se do H taky cpe kde co, co by tam puristicky vzato být nemělo. Je jasné, že z jednoho zdrojáku si můžu zkompilovat víc různých verzí DLL s jiným volacím modelem či úpravou pro debugování, ale to podle mě pořád neznamená, že by to vše nemohlo být definováno v tom zdrojáku pomocí nějakých #if/#ifdef větví. Samozřejmě bych ale dal přednost tomu, aby tohle bylo v tom DLL. Protože to jsou metadata DLL, ne hlavičkového souboru, tak by přece měla být v DLL přímo. Microsoft to díky bohu správně navrhl v .NETových knihovnách, ty už jsou stoprocentně sebepopisné. |
|
Návrat nahoru |
|
 |
VODA

Založen: 29. 07. 2007 Příspěvky: 1721 Bydliště: Plzeň
|
Zaslal: 9. říjen 2011, 19:18:16 Předmět: |
|
|
Mimochodem, někde jsem se dočetl, že MinGW umí dělat DLL rovnou i s LIB. Nevíte náhodou jak MinGW k tomuto přinutit (pokud to jde)? _________________ Opravdovost se pojí s trýzní... |
|
Návrat nahoru |
|
 |
Marek

Založen: 28. 07. 2007 Příspěvky: 1782 Bydliště: Velká Morava
|
Zaslal: 9. říjen 2011, 19:36:47 Předmět: |
|
|
U gcc se namísto .lib souborů používají .a soubory. Používá se to na static lib, ale nedivil bych se, kdyby to MinGW generovalo i pro dll (jelikož dll není sebepopisné). _________________ AMD Open Source Graphics Driver Developer |
|
Návrat nahoru |
|
 |
VODA

Založen: 29. 07. 2007 Příspěvky: 1721 Bydliště: Plzeň
|
Zaslal: 9. říjen 2011, 22:36:53 Předmět: |
|
|
Sebepopisné sice není, ale pokud si udělám dll přes MinGW, tak k němu nepotřebuji to *.a, ale stačí mi, když dll přidám k binárce a v linkeru normálně přilinkuji tuto knihovnu (-l)... jsem se divil ale jde to... _________________ Opravdovost se pojí s trýzní... |
|
Návrat nahoru |
|
 |
|