Jak vytvořit knihovny importovat 32bitové bez.OBJs nebo zdroje

Překlady článku Překlady článku
ID článku: 131313
Rozbalit všechny záložky | Minimalizovat všechny záložky

Na této stránce

Souhrn

Tento článek vysvětluje, jak vytvořit knihovnu aplikace import dané.Knihovna DLL pro které máte k dispozici žádné moduly zdrojový kód nebo objektu. Není k dispozici žádné 32bitové nástroje můžete vytvořit knihovnu aplikace import z.Knihovna DLL, jako byl s 16 bitů verze aplikace Visual C++.

POZNÁMKA:: S knihovnami DLL pomocí jiné společnosti než Microsoft vývojové nástroje tato metoda nefunguje.

Další informace

Za normálních okolností při vytváření.Knihovna DLL nebo jakékoli cíl, který exportuje funkce nebo dat položky, import knihovny (a vývozy souboru) je generována jako součást proces propojení. Ale u třetí stranou.Knihovny DLL, která nejsou dodávány. s importovat knihovny bude pravděpodobně nutné generovat z import knihovny v pořadí použít.Knihovna DLL úspěšně pomocí dynamické propojení zatížení čas. Import Knihovna není nutný pro spuštění dynamické propojení.

Existují dva způsoby, jak vytvořit knihovnu aplikace import dané.KNIHOVNA DLL:
  • Vytvoření.DEF soubor pro použití s LIB /DEF: příkaz.
  • Zóny se zakázaným inzerováním funkcí a používat.OBJ soubory vytvořené napodobit Import a export vztahů. Potom pomocí LIB /DEF: příkaz k vytvoření import knihovny.

Vytvoření.Soubor DEF

Pouze čas, můžete použít.Soubor DEF vytvořit knihovnu aplikace import z .Knihovna DLL, pro které nemáte modulů zdrojový kód nebo objekt je-li .Knihovna DLL exportuje funkce prostřednictvím c rozhraní. Konkrétně funkce nutné aby byly prohlášeny za použití c konvence volání. To je určeno atribut _cdecl prototyp běžně používá pro funkci. Poznámka: Pokud není zadán žádný atribut, _cdecl je ve výchozím nastavení při /Gz (_stdcall je výchozí nastavení) nebo /Gr (_fastcall je výchozí) není zadáno na CL příkazový řádek. Důvod tohoto omezení je založen na předpokladu provedené nástrojem LIB všechny názvy jsou automaticky exportovány bez úvodní podtržení. To platí pouze pro názvy funkcí _cdecl.

Vzhledem.DLL, funkce exportované prostřednictvím c rozhraní, můžete vytvořit Importujte knihovny pomocí následujících kroků:
  1. Použití DUMPBIN /EXPORTS <.dll file="" name=""> k získání seznamu exportu symboly.Knihovna DLL dané. Symboly se objeví v "název" sloupce tabulky, jejichž nadpisy jsou "řadové nápovědu pro jméno. </.dll>
  2. Vytvoření.DEF soubor, který obsahuje oddíl vývozu s názvy funkce uvedené ve sloupci "název" DUMPBIN výstupu.
  3. Funkce _cdecl symbol zobrazen stejně, jako by v volající program. Stačí umístíte tento symbol v oblasti vývozu na.DEF soubor.
  4. Použít LIB /DEF:<.def file="" name=""> vygenerovat knihovnu dovozu a vývozu soubor. Základní název knihovny importu bude základní název .DEF soubor. Použijte/OUT: ovládání výstupní název knihovny. </.def>

Stubbing funkcí

Pro exportované funkce, které používají konvence volání než C situace je poněkud složitější. To platí zvláště pokud jste Zvažte C++ funkcí a složitější dekorace schémata název podílet. Chcete-li použít tuto metodu, musíte mít alespoň záhlaví souboru Popisuje.Knihovna DLL daného rozhraní.

Vytvoření stubbed funkce z prototypů v záhlaví souboru:
  1. Při použití "__declspec(dllimport)" v prohlášení nebo prototypu změnit na "__declspec(dllexport)".
  2. Pro funkce, které nevrací hodnotu c funkcí v c zdroji, a c funkcí jazyka C++ zdrojový kód (používá se s "extern"C"" konstrukce), středník, který ukončuje prototyp funkce nahradit odpovídající dvojici složených závorek ("{}").
  3. Pro funkce C++ (globální nebo člen), vrátí hodnotu, je nutné vytvořit zástupný text pro funkci a vrátit hodnotu figuríny správného typu. (Bez nutnosti příkaz return ve funkci je neplatná.) To přejde pro třídy funkce členů, také. Pamatujte Cílem tohoto postupu je podvodně nástroj LIB do generování správný import knihovny tak, aby tyto subjekty figuríny nemají žádný vliv.
  4. Pro třídy jazyka C++, je můžete stub funkcí člena pomocí prototypy v deklaraci třídy, tak dlouho, jak zakázat funkci inlining při sestavování.
  5. Argumenty funkce jsou obvykle stačí určený typem v hlavičce souboru. Například Geta(int). Musí být zadán identifikátor figuríny argument Při přidávání těle figuríny funkce Geta(int x). V opačném případě došlo k chybě C2055 je generována.

Příklad

Pokud záhlaví souboru, který popisuje MYDLL.Knihovna DLL vypadá:
// 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();
};
				
By měl vypadat figuríny zdrojový soubor použijete k vytvoření import knihovny:
 // 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() {}
 };
				
Jakmile funkce jsou stubbed, je třeba je kompilace zdrojový soubor do.OBJ soubor:
CL /c /Ob0 mydll.CPP
Poznámka: Zakázání funkce inlining je požadováno vynucení generace symboly pro funkce definované v CMyClass. Pokud funkce inlining povoleno, kompilátor by si, že neexistují žádné odkazy na funkce členů v jednotce překlad, tak ji by zrušení funkce subjekty. Zobrazit diskusi na rozšiřující funkce vložené v části Optimalizace v odkazu na Visual C++ CL příkazového řádku.

Jakmile máte.OBJ souborů, můžete použít LIB /DEF: vytvoření import Knihovna (.LIB) a soubor vývozu (.EXP):
LIB /DEF: mydll.OBJ
Další informace o příkazu LIB konzultovat "LIB odkaz" v Visual C++ Books Online.

Viz také v následujícím článku znalostní báze Microsoft Knowledge Base:
140485 Exportování symbolů podobných PASCAL v 32bitových knihoven DLL

Vlastnosti

ID článku: 131313 - Poslední aktualizace: 23. dubna 2011 - Revize: 4.0
Klíčová slova: 
kb3rdparty kbcode kbhowto kbmt KB131313 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku:131313
Právní omezení pro obsah znalostní báze týkající se produktů, jejichž podpora byla ukončena
Tento článek byl napsán o produktech, pro které společnost Microsoft již neposkytuje nadále podporu. Článek je tedy nabízen v takovém stavu, v jakém je, a nebude již nadále aktualizován.

Dejte nám zpětnou vazbu

 

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