.[ ČeskéHry.cz ].
MinGW :: MSVC :: Linker :: DLL
Jdi na stránku Předchozí  1, 2
 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> C / C++
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

PříspěvekZaslal: 7. říjen 2011, 15:22:26    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
frca



Založen: 28. 07. 2007
Příspěvky: 1561

PříspěvekZaslal: 7. říjen 2011, 18:32:22    Předmět: Odpovědět s citátem

A co funkce LoadLibrary, GetProcAddress a spol.? Ty by nešly použít?
_________________
www.FRANTICWARE.com
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Al



Založen: 23. 10. 2007
Příspěvky: 196

PříspěvekZaslal: 9. říjen 2011, 18:54:39    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
VODA



Založen: 29. 07. 2007
Příspěvky: 1721
Bydliště: Plzeň

PříspěvekZaslal: 9. říjen 2011, 19:18:16    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
Marek



Založen: 28. 07. 2007
Příspěvky: 1782
Bydliště: Velká Morava

PříspěvekZaslal: 9. říjen 2011, 19:36:47    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
VODA



Založen: 29. 07. 2007
Příspěvky: 1721
Bydliště: Plzeň

PříspěvekZaslal: 9. říjen 2011, 22:36:53    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> C / C++ Časy uváděny v GMT + 1 hodina
Jdi na stránku Předchozí  1, 2
Strana 2 z 2

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna