Momentálne ste offline a čaká sa, kým sa znova pripojíte na internet

Ako vytvoriť 32-bitové dovozné knižniciach bez.OBJs alebo zdroja

DÔLEŽITÉ: Tento článok bol preložený pomocou softvéru na strojový preklad od spoločnosti Microsoft, nie prekladateľom. Spoločnosť Microsoft ponúka články preložené prekladateľmi aj strojovo preložené články, vďaka čomu máte možnosť prístupu ku všetkým článkom databázy Knowledge Base vo svojom jazyku. Strojovo preložený článok však nie je vždy perfektný. Môže obsahovať chyby týkajúce sa slovnej zásoby, syntaxe alebo gramatiky, podobne ako cudzinec môže robiť chyby, keď rozpráva vašim jazykom. Spoločnosť Microsoft nenesie zodpovednosť za akékoľvek nepresnosti, chyby alebo škody spôsobené akýmkoľvek nepresným prekladom obsahu alebo jeho použitím zo strany zákazníkov. Spoločnosť Microsoft softvér na strojový preklad pravidelne aktualizuje.

Pokiaľ chcete vidieť anglickú verziu článku, kliknite sem:131313
Upozornenie na neaktuálny obsah článku databázy KB
Tento článok obsahuje informácie o produktoch, pre ktoré spoločnosť Microsoft už neposkytuje technickú podporu. Z tohto dôvodu je tento článok publikovaný ako nezmenený a už nebude aktualizovaný.
SUHRN
Tento článok vysvetľuje, ako vytvoriť knižnicu dovozné vzhľadom.Knižnica DLL prektoré máte žiadny zdrojový kód alebo objekt modulov. Neexistuje žiaden úžitok 32-bitovéže môžete vytvoriť knižnicu dovozu z.DLL, pretože bol s 16-bitovéverzie Visual C++.

POZNÁMKA: Táto metóda môže pracovať s dll generované s-Microsoft vývojové nástroje.
DALSIE INFORMACIE
Normálne, keď budova.Knižnica DLL alebo akýkoľvek cieľ, že vývozy funkcie alebo údajovpoložky, dovozné knižnice (a vývozy súboru) je generovaný ako súčasťspájajúcej proces. Ale v prípade tretej strany.Knižnica DLL, ktorá nie je v lodes dovozné knižnice, možno budete musieť generovať knižnicu dovozné v objednávkupoužívať.DLL úspešne používajú dynamické linkovanie doby načítania. Dovozknižnica nie je potrebné pre dynamické prepojenie run-time.

Existujú dva spôsoby, ako vytvoriť knižnicu dovozné vzhľadom.DLL:
  • Vytvoriť.DEF súbor na použitie s LIB /DEF: príkaz.
  • Zákaz fajčenia funkcie a použitie.OBJ súbory vytvorené na imitovanie Import a export vzťahy. Potom použite LIB /DEF: príkaz vytvoriť dovozné knižnica.

Vytvorenie.DEF súbor

Len čas môžete použiť.DEF súbor vytvoriť knižnicu dovozu z.Knižnica DLL pre ktoré nemáte zdrojový kód alebo objekt moduly je ak.DLL exportuje funkcie cez c rozhranie. Konkrétne je potrebné funkciebol prihlásený použiť c volajúceho dohovoru. To je presne stanovené vatribút _cdecl bežne používajú v prototyp pre funkciu. Poznámka:že ak sa neurčí žiadny atribút, _cdecl je predvolená pri /Gz (_stdcallje predvolená) alebo /Gr (_fastcall je predvolená) nie je stanovená naCL príkazový riadok. Dôvodom tohto obmedzenia je založený na prevzatievykonané LIB utilita, ktorá všetky mená sa automaticky exportujú bezvedúci podčiarknutia. Toto platí len pre názvy funkcií _cdecl.

Uvedené.DLL s funkciami vyvážané cez c rozhrania, môžete vytvoriťImportovať knižnice pomocou nasledujúcich krokov:
  1. Použitie DUMPBIN /EXPORTS <.dll file="" name="">na získanie zoznamu vyvážané symboly pre.DLL predmetné. Symboly, ktoré sa zobrazia v "názov" stĺpci tabuľky, ktorého položky sa "ordinálny nádychom meno.</.dll>
  2. Vytvoriť.DEF súbor, ktorý obsahuje sekciu vývozy s názvami funkcie, ktoré sú vymenované v stĺpci "názov" DUMPBIN výstupu.
  3. Pre _cdecl funkcie, symbol sa zobrazí rovnako, ako by pri použití v volá program. Jednoducho miesto tento symbol v sekcii vývozy .DEF súbor.
  4. Použiť LIB /DEF:<.def file="" name=""> generovať knižnica dovozu a vývozu súbor. Základný názov knižnice dovozné bude základný názov .DEF súbor. Použite/OUT: kontrolovať názov výstupného knižnice.</.def>

Stubbing funkcie

Pre exportované funkcie, ktoré používajú volajúceho dohovorov ako C,situácia je trochu zložitejšia. To je pravda, najmä keď stezvážiť C++ funkcie a zložitejšie názov dekorácie schémzapojené. Používať túto metódu, musíte mať aspoň v hlavičke súboruPopisuje.Knižnice DLL rozhrania.

Vytvorenie stubbed funkcie z prototypy v hlavičke súboru:
  1. Ak sa použije "__declspec(dllimport)" v prototyp alebo vyhlásenia, zmeniť na „__declspec(dllexport). ”
  2. Pre funkcie, ktoré nemôže vrátiť hodnotu, C funkcií v c zdroja, a pre c funkcií v c ++ zdrojový kód (používa so "extern"C"" Zostrojte), nahradiť bodkočiarka, ktorý uzaviera funkcia prototyp s splnenej párom zátvorky ("{}").
  3. Pre C++ funkcie (globálne alebo člen) že vrátiť hodnotu, musíte vytvoriť figuríny telo pre funkciu a vrátiť hodnotu figuríny riadne typu. (Nemá návratky vyhlásenie vo funkcii je nelegálne.) To platí pre triedy členom funkcie, ako aj. Majte na pamäti, že Účelom tohto postupu je trik utility LIB do generovanie knižnica správne dovozných, tak tieto figuríny orgány nemajú žiadny vplyv.
  4. Pre c ++ triedy, ste môžete stub členské funkcie pomocou prototypy triedy vyhlásenia, tak dlho, ako by ste vypnúť funkciu inlining keď ste zostaviť.
  5. Argumenty funkcie sú obvykle stačí špecifikované podľa druhu v hlavičke súboru. Napríklad, Geta(int). Musia byť špecifikované figuríny tvrdenie identifikátor pri pridávaní figuríny funkcie orgánu Geta(int x). Inak sa vyskytla chyba C2055 je generovaný.

Príklad

Ak v hlavičke súboru, ktorý opisuje MYDLL.DLL vyzerá takto:
// mydll.Hextern "C" __declspec(dllimport) void _stdcall Function(void);class __declspec(dllimport) CMyClass {     int a;     long b;public:     int Geta(int);     long Getb();     CMyClass();};				
Figuríny zdrojového súboru použijete vybudovať dovozné knižnica by mal vyzerať takto:
 // mydll.CPP extern "C" __declspec(dllexport) void _stdcall Function(void) {} class __declspec(dllexport) CMyClass {      int a;      long b; public:      int Geta(int x) {return 111;}      long Getb() {return 111;}      CMyClass() {} };				
Akonáhle funkcie sú stubbed, všetko, čo potrebujete urobiť je zostaviťzdrojový súbor do.OBJ súbor:
CL /c /Ob0 mydll.CPP
Poznámka: Vypnutie funkcie inlining je potrebné prinútiť generáciesymboly pre funkcií definovaných v CMyClass. Ak funkcia inliningzapnuté, kompilátor by oznámenie, že neexistujú žiadne odkazy naČlenské funkcie v prekladateľské jednotky, aby by zbaviť funkcieorgánov. Vidieť diskusie na inline funkciu rozšírenia podľa optimalizáciev odkaze na Visual C++ CL príkazový riadok.

Akonáhle budete mať.OBJ súborov, môžete použiť LIB /DEF: vytvoriť dovozknižnica (.LIB) a vývozy súbor (.EXP):
LIB /DEF: mydll.TDM
Ďalšie informácie o príkaze LIB konzultovať "Odkaz na LIB" vVisual C++ Books Online.

Tiež pozri článok v databáze Microsoft Knowledge Base:
140485 Vyvážajúci PASCAL-rovnako ako symboly v 32-bit DLL
2.50 2.55 ODKAZ /LIB

Upozornenie: Tento článok bol preložený automaticky.

Vlastnosti

ID článku: 131313 – Posledná kontrola: 10/10/2011 11:32:00 – Revízia: 2.0

  • kb3rdparty kbcode kbhowto kbmt KB131313 KbMtsk
Pripomienky