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

Preklady článku Preklady článku
ID článku: 131313
Rozbaliť všetko | Zbaliť všetko

Na tejto stránke

SUHRN

Tento článok vysvetľuje, ako vytvoriť knižnicu dovozné vzhľadom.Knižnica DLL pre ktoré 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 údajov polož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 lode s dovozné knižnice, možno budete musieť generovať knižnicu dovozné v objednávku používať.DLL úspešne používajú dynamické linkovanie doby načítania. Dovoz kniž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é funkcie bol prihlásený použiť c volajúceho dohovoru. To je presne stanovené v atribút _cdecl bežne používajú v prototyp pre funkciu. Poznámka: že ak sa neurčí žiadny atribút, _cdecl je predvolená pri /Gz (_stdcall je predvolená) alebo /Gr (_fastcall je predvolená) nie je stanovená na CL príkazový riadok. Dôvodom tohto obmedzenia je založený na prevzatie vykonané LIB utilita, ktorá všetky mená sa automaticky exportujú bez vedú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ď ste zvážiť C++ funkcie a zložitejšie názov dekorácie schém zapojené. Používať túto metódu, musíte mať aspoň v hlavičke súboru Popisuje.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.H

extern "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ácie symboly pre funkcií definovaných v CMyClass. Ak funkcia inlining zapnuté, kompilátor by oznámenie, že neexistujú žiadne odkazy na Členské funkcie v prekladateľské jednotky, aby by zbaviť funkcie orgánov. Vidieť diskusie na inline funkciu rozšírenia podľa optimalizácie v odkaze na Visual C++ CL príkazový riadok.

Akonáhle budete mať.OBJ súborov, môžete použiť LIB /DEF: vytvoriť dovoz knižnica (.LIB) a vývozy súbor (.EXP):
LIB /DEF: mydll.TDM
Ďalšie informácie o príkaze LIB konzultovať "Odkaz na LIB" v Visual 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

Vlastnosti

ID článku: 131313 - Posledná kontrola: 10. októbra 2011 - Revízia: 2.0
Kľúčové slová: 
kb3rdparty kbcode kbhowto kbmt KB131313 KbMtsk
Strojovo preložené
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ý.

Odošlite odozvu

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com