.[ ČeskéHry.cz ].
Volání DLL funkcí

 
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
SnYper



Založen: 13. 07. 2008
Příspěvky: 9

PříspěvekZaslal: 26. květen 2010, 17:53:43    Předmět: Volání DLL funkcí Odpovědět s citátem

Zdravím, mám v C++ kód pro načtení DLL. DLL to načte v pohodě, ale nevím, jak zavolat určitou funkci z ní.

Zdroj:
kód:

#include <iostream>
#include <windows.h>

typedef int (*AddFunc)(int,int);
typedef void (*FunctionFunc)();

int main()
{
   AddFunc _AddFunc;
   FunctionFunc _FunctionFunc;
   HINSTANCE hInstLibrary = LoadLibrary("Knihovna.dll");

   if (hInstLibrary)
   {
      _AddFunc = (AddFunc)GetProcAddress(hInstLibrary, "Add");
      _FunctionFunc = (FunctionFunc)GetProcAddress(hInstLibrary,
         "Function");

      if (_AddFunc)
      {
         std::cout << "23 = 43 = " << _AddFunc(23, 43) << std::endl;
      }
      if (_FunctionFunc)
      {
         _FunctionFunc();
      }
      FreeLibrary(hInstLibrary);
     std::cout << "Dll byla uspesne nactena!" << std::endl;
   }
   else
   {
      std::cout << "Chyba pri nacitani DLL!" << std::endl;
   }

   std::cin.get();

   return 0;
}


Děkuji za rady Smile
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Mnemonic



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

PříspěvekZaslal: 26. květen 2010, 21:37:09    Předmět: Odpovědět s citátem

Mno, vždyť ty funkce voláš, _AddFunc(23, 43) a _FunctionFunc(). Asi nechápu, v čem je problém, ten kód vypadá ok.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
SnYper



Založen: 13. 07. 2008
Příspěvky: 9

PříspěvekZaslal: 27. květen 2010, 14:24:26    Předmět: Odpovědět s citátem

Když DLL obsahuje funkci Init();, jak ji zavolám?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Mnemonic



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

PříspěvekZaslal: 27. květen 2010, 15:01:08    Předmět: Odpovědět s citátem

Úplně stejně, jako jsou volané ty dvě funkce tvém kódu (předpokládám, že jsi to někde zkopíroval). Tj. přes GetProcAddress si řekneš o adresu funkce s daným jménem, a pak ji zavoláš.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Játro.m



Založen: 01. 02. 2010
Příspěvky: 230

PříspěvekZaslal: 27. květen 2010, 19:52:31    Předmět: Odpovědět s citátem

Docela by me zajimalo k cemu je to dobry. Neni to spis zachazka? Predpokladam ze kdyz mam DLL tak k ni mam aji LIBku s hlavickou, pres kterou si ty funkce primo zavolam. Nebo mam jenom DLLku od ktere nemam *.lib/a a potrebuju ty funkce a nemuzu si to zakompilovat? Nechapu to xD
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Deluxe



Založen: 31. 07. 2007
Příspěvky: 235
Bydliště: Oslavany

PříspěvekZaslal: 27. květen 2010, 21:01:37    Předmět: Odpovědět s citátem

A co takhle treba OpenGL extenze? Wink
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Quiark



Založen: 29. 07. 2007
Příspěvky: 816
Bydliště: Chlívek 401

PříspěvekZaslal: 27. květen 2010, 22:17:15    Předmět: Odpovědět s citátem

Typicky se takto implementují pluginy. Tedy mám dopředu danou akorát definici funkcí a DLLka už píše někdo jiný. A taky to umožňuje najít funkci podle stringu, typicky pro vytváření objektů (Create_CPlayer, Create_CMonster, Create_CBullet).
_________________
Mám strach
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Ladis



Založen: 18. 09. 2007
Příspěvky: 1537
Bydliště: u Prahy

PříspěvekZaslal: 27. květen 2010, 23:39:05    Předmět: Odpovědět s citátem

Asi takhle, když nevíš, k čemu je to dobré, tak to asi teď nepotřebuješ Wink.
_________________
Award-winning game developer
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Játro.m



Založen: 01. 02. 2010
Příspěvky: 230

PříspěvekZaslal: 28. květen 2010, 06:53:26    Předmět: Odpovědět s citátem

No s tema extenzema me to nenapadlo. Nevadi aspon jsem chytrejsi Wink
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
Strana 1 z 1

 
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