Teď jste offline a čekáte, až se znova připojí internet.

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

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.
Souhrn
Tento článek vysvětluje, jak vytvořit knihovnu aplikace import dané.Knihovna DLL prokteré máte k dispozici žádné moduly zdrojový kód nebo objektu. Není k dispozici žádné 32bitové nástrojemůž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 datpoložky, import knihovny (a vývozy souboru) je generována jako součástproces 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. ImportKnihovna 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čenoatribut _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 (_stdcallje výchozí nastavení) nebo /Gr (_fastcall je výchozí) není zadáno naCL příkazový řádek. Důvod tohoto omezení je založen na předpokladuprovedené 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řitImportujte 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ž Csituace je poněkud složitější. To platí zvláště pokud jsteZvažte C++ funkcí a složitější dekorace schémata názevpodílet. Chcete-li použít tuto metodu, musíte mít alespoň záhlaví souboruPopisuje.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.Hextern "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 kompilacezdrojový soubor do.OBJ soubor:
CL /c /Ob0 mydll.CPP
Poznámka: Zakázání funkce inlining je požadováno vynucení generacesymboly pro funkce definované v CMyClass. Pokud funkce inliningpovoleno, kompilátor by si, že neexistují žádné odkazy nafunkce členů v jednotce překlad, tak ji by zrušení funkcesubjekty. Zobrazit diskusi na rozšiřující funkce vložené v části Optimalizacev odkazu na Visual C++ CL příkazového řádku.

Jakmile máte.OBJ souborů, můžete použít LIB /DEF: vytvoření importKnihovna (.LIB) a soubor vývozu (.EXP):
LIB /DEF: mydll.OBJ
Další informace o příkazu LIB konzultovat "LIB odkaz" vVisual 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
2,50 2.55 PROPOJENÍ /LIB

Upozornění: Tento článek je přeložený automaticky

Vlastnosti

ID článku: 131313 - Poslední kontrola: 04/23/2011 13:09:00 - Revize: 4.0

  • kb3rdparty kbcode kbhowto kbmt KB131313 KbMtcs
Váš názor
&t=">e;" onerror="var m=document.createElement('meta');m.name='ms.dqp0';m.content='true';document.getElementsByTagName('head')[0].appendChild(m);" onload="var m=document.createElement('meta');m.name='ms.dqp0';m.content='false';document.getElementsByTagName('head')[0].appendChild(m);" src="http://c1.microsoft.com/c.gif?"> >/html>