Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
SnYper
Založen: 13. 07. 2008 Příspěvky: 9
|
Zaslal: 26. květen 2010, 17:53:43 Předmět: Volání DLL funkcí |
|
|
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  |
|
Návrat nahoru |
|
 |
Mnemonic

Založen: 28. 07. 2007 Příspěvky: 93
|
Zaslal: 26. květen 2010, 21:37:09 Předmět: |
|
|
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 |
|
 |
SnYper
Založen: 13. 07. 2008 Příspěvky: 9
|
Zaslal: 27. květen 2010, 14:24:26 Předmět: |
|
|
Když DLL obsahuje funkci Init();, jak ji zavolám? |
|
Návrat nahoru |
|
 |
Mnemonic

Založen: 28. 07. 2007 Příspěvky: 93
|
Zaslal: 27. květen 2010, 15:01:08 Předmět: |
|
|
Ú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 |
|
 |
Játro.m
Založen: 01. 02. 2010 Příspěvky: 230
|
Zaslal: 27. květen 2010, 19:52:31 Předmět: |
|
|
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 |
|
 |
Deluxe

Založen: 31. 07. 2007 Příspěvky: 235 Bydliště: Oslavany
|
Zaslal: 27. květen 2010, 21:01:37 Předmět: |
|
|
A co takhle treba OpenGL extenze?  |
|
Návrat nahoru |
|
 |
Quiark

Založen: 29. 07. 2007 Příspěvky: 816 Bydliště: Chlívek 401
|
Zaslal: 27. květen 2010, 22:17:15 Předmět: |
|
|
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 |
|
 |
Ladis

Založen: 18. 09. 2007 Příspěvky: 1537 Bydliště: u Prahy
|
Zaslal: 27. květen 2010, 23:39:05 Předmět: |
|
|
Asi takhle, když nevíš, k čemu je to dobré, tak to asi teď nepotřebuješ . _________________ Award-winning game developer |
|
Návrat nahoru |
|
 |
Játro.m
Založen: 01. 02. 2010 Příspěvky: 230
|
Zaslal: 28. květen 2010, 06:53:26 Předmět: |
|
|
No s tema extenzema me to nenapadlo. Nevadi aspon jsem chytrejsi  |
|
Návrat nahoru |
|
 |
|