Stránka: 1 z 1
| [ Príspevkov: 14 ] | |
Autor | Správa |
---|
Registrovaný: 22.05.10 Prihlásený: 09.12.15 Príspevky: 42 Témy: 24 | 24 |
Dobry den,
mam jednu funkciu ulozenu v dll subore. Co mam urobit, aby som tu funkciu mohol pouzit?
|
|
Registrovaný: 24.01.08 Prihlásený: 13.09.17 Príspevky: 14572 Témy: 66 | 66 Bydlisko: Žilina |
musíš si importnúť danú knižnicu a fičíš avšak daná "funkcia" atď musia mať povolený prístup zvonku...
_________________ C#, PHP, ... |
|
Registrovaný: 22.05.10 Prihlásený: 09.12.15 Príspevky: 42 Témy: 24 | 24 |
a ako ju mam importnut v dev-c++?
|
|
Registrovaný: 11.01.09 Prihlásený: 23.11.24 Príspevky: 1395 Témy: 10 | 10 Bydlisko: Hrinova |
Su dva sposoby: implicitne linkovanie a explicitne linkovanie. Implicitne je trocha komplikovanejsie, potrebujes k nemu nie len dll subor, ale aj lib subor. Musis kompilatoru oznamit, ze dana kniznica sa ma prilinkovat a potom v kode volas pomocou:
Kód: dllImport __declspec( dllimport ) Explicitne volanie je myslim jednoduchsie, ale zavisi aj od operacneho systemu. Ak pouzivas windows, tak tu je priklad: Kód: #include <iostream> #include "windows.h"
int (*functionName)(void);
int main() {
HMODULE hLib;
hLib = LoadLibrary( "Project1.dll" ); functionName = ( int(*)(void) )GetProcAddress( hLib, "MyFunction" ); if ( functionName != NULL ) std::cout << functionName() << std::endl; else std::cout << "Error - GetLastError = " << GetLastError() << std::endl; std::cin.get();
FreeLibrary( hLib ); return 0;
}
Tu mas blizsie popisane tieto funkcie:
LoadLibrary
GetProcAddress
FreeLibrary
Ak by si nahodou pouzival linux, tak napis, postup bude podobny, len sa pouziju ine kniznice ( dlopen, dlsym ).
|
|
Registrovaný: 22.05.10 Prihlásený: 09.12.15 Príspevky: 42 Témy: 24 | 24 | |
Registrovaný: 02.11.07 Prihlásený: 18.03.15 Príspevky: 470 Témy: 22 | 22 Bydlisko: Zilinska Un... |
Fico ale on nechce programovat linkovanie kniznic dll. On chce iba pouzit v kode externu kniznicu co je uplne normalna vec. Tam nemusis nic programovat, v nastaveniach projektu tvojho ID iba najdi C++ Linker, kde sa linkuju externe kniznice a zadaj tam cestu ku tej kniznici dll, to je pre spustenie. Aby si mohol programovat a videl funkcie, tak este kompilatoru nastav Include Directories, kde su hlavickove subory tej kniznice. Ty uz nic neprogramojes, iba prilinkujes hlavickovy, kde je ta funkcia #include "haha.h" a rovno pouzivas tie externe funkcie, kompilator to uz vsetko pospaja sam.
_________________ Notebook: HP EliteBook 8740w
You can see my work in my www |
|
Registrovaný: 11.01.09 Prihlásený: 23.11.24 Príspevky: 1395 Témy: 10 | 10 Bydlisko: Hrinova |
Ved to som mu aj napisal - tento tvoj postup sa naziva implicitne linkovanie. Ale nie som si isty, ci sa to da, ak nemas *.lib subor. Viem, ze su nejake utility na vytvorenie lib suboru z dll, ale myslim, ze to je zbytocna praca naviac, ak sa jedna iba o jednu funkciu, ako spomenul autor temy.
|
|
Registrovaný: 02.11.07 Prihlásený: 18.03.15 Príspevky: 470 Témy: 22 | 22 Bydlisko: Zilinska Un... |
Ja som zas odchovanec Linuxu, kde staci nalinkovat iba *.so subor do eclipse. Takze opravujem, bude potrebovat vo windows v ID aj ten *.lib subor. Takze potrebuje "hlavickove", "*.lib" do svojho ID. Pre spustenie mimo ID mu staci iba nakopirovat ku exe suboru tu DLL. Ja som to tiez tak robil v MVS s OpenSSL kniznicou vo windowse, inak mi to neslo myslim.
_________________ Notebook: HP EliteBook 8740w
You can see my work in my www |
|
Registrovaný: 11.01.09 Prihlásený: 23.11.24 Príspevky: 1395 Témy: 10 | 10 Bydlisko: Hrinova |
Tak som sa na to pozrel trocha blizsie ( uz dlho som neprogramoval pod Windowsom... ) a podarilo sa mi zavolat funkciu pomocou implicitneho linkovania aj bez lib suboru - akurat treba kompilovat rucne, nie v prostredi. Maly priklad pre zakladatela temy, ak ho to este zaujima, nakolko teraz to je dokonca jednoduchsie, ako explicitne volanie:
Kód: #ifdef __cplusplus extern "C" { #endif
__declspec( dllimport ) int __stdcall MessageBoxA( int, char*, char*, int );
#ifdef __cplusplus } #endif
int main() {
char text[] = "TESTING";
MessageBoxA( 0, text, text, 0 ); return 0;
} Kompilacia ( mingw kompilator ): Kód: g++ main.cpp -luser32
Miesto main.cpp si daj svoj nazov, pripadne viac suborov podla potrieb a kniznica sa pise v tvare -l nazov_kniznice_bez_pripony
// ak sa kniznica nenachadza v zlozke s programom, pripadne v systemovej zlozke, tak pri kompilacii treba uviest este flag -L cesta_ku_kniznici
|
|
Registrovaný: 02.11.07 Prihlásený: 18.03.15 Príspevky: 470 Témy: 22 | 22 Bydlisko: Zilinska Un... |
Ja vo svojom programe tiez pouzivam explicitne volanie kniznice, kde mam spraveny tak system nahravania toolboxov, kde vopred nepoznam ani nazov, je to nezavisle od OS (Linux-so aj Win-dll ...). Normal sa to kompiluje v ID. Mozem to tu ukazat, ale myslim, ze si uzivatel vystaci aj s tym klasickym nalinkovanim cez ID, ako sme mu uz pisali hore.
Dalej, v Eclipse a gcc kompilatore vo windowse, mi stacilo iba to *.dll a nepotreboval som *.lib subor, pricom v MVS + win kompilator som potreboval *.lib, neviem ci to zavisi od ID alebo kompilatora, ale bolo to davno. Myslim, ze uz komplikujem .
Hlavny problem je to, ze uz sa taky nik nenajde co pouziva dev-c++, tak ti to nema kto vyskusat a povedat na 100%, ja si koli tebe nemienim instalovat dev-c++, je to stara vykopavka.
_________________ Notebook: HP EliteBook 8740w
You can see my work in my www |
|
Registrovaný: 14.03.11 Prihlásený: 04.07.24 Príspevky: 815 Témy: 23 | 23 Bydlisko: Bratislava |
ja to mám takto:
Kód: using namespace System::Configuration; // <=== #using <System.Configuration.dll> // <===
|
|
Registrovaný: 11.01.09 Prihlásený: 23.11.24 Príspevky: 1395 Témy: 10 | 10 Bydlisko: Hrinova |
Tak toto skor vyzera na C#, my sa bavime o C++ ...
_________________ Ak potrebujete pomoc s diagnostikou/opravou vasej elektroniky ( notebook, motherboard, GPU, a ine ), kontaktujte ma cez SS. |
|
Registrovaný: 14.03.11 Prihlásený: 04.07.24 Príspevky: 815 Témy: 23 | 23 Bydlisko: Bratislava |
Fico píše: Tak toto skor vyzera na C#, my sa bavime o C++ ...
Blbé, ja to tak mám v C++.
|
|
Registrovaný: 02.11.07 Prihlásený: 18.03.15 Príspevky: 470 Témy: 22 | 22 Bydlisko: Zilinska Un... |
Ja neviem co pouzivate, ked to musite riesit takymto komplikovanym sposobom. Kodim v linuxe a vo windowse a to v Eclipse, Codeblocks, MVS. Vzdy mi stacilo cez ID v nastaveniach povedat iba linkeru nazov SO or DLL kniznice a kompilatoru dat hlavickove a to pouzivam xy kniznic + vlastne.
Jedine, ked som to obchadzal, pri programovani, ked som dopredu nepoznal nazov kniznice, tak sa robi system toolboxov, kde som kodil vlastny linker.
_________________ Notebook: HP EliteBook 8740w
You can see my work in my www |
|
Stránka: 1 z 1
| [ Príspevkov: 14 ] | |
Podobné témy | Témy | Odpovede | Zobrazenia | Posledný príspevok |
---|
| v Antivíry a antispywary | 2 | 525 | 02.10.2007 14:20 DevilMayCry | | v Assembler, C, C++, Pascal, Java | 0 | 277 | 19.11.2011 14:29 Loko11 | | v Assembler, C, C++, Pascal, Java | 3 | 402 | 05.02.2016 12:57 Elendil | | v Operačné systémy Microsoft | 8 | 1301 | 06.01.2010 19:48 prandof | | v PHP, ASP | 2 | 391 | 18.01.2017 8:51 mackooo | | v Operačné systémy Microsoft | 3 | 581 | 18.04.2009 9:49 Horalka | | v Operačné systémy Microsoft | 0 | 617 | 26.09.2007 13:22 kolci | | [ Choď na stránku: 1, 2 ] v Antivíry a antispywary | 36 | 3430 | 23.01.2013 19:02 personal compuper | | v Ostatné | 4 | 600 | 15.09.2013 0:09 Marko289 | | v Operačné systémy Microsoft | 1 | 818 | 11.08.2010 19:15 Revolution | | v Assembler, C, C++, Pascal, Java | 5 | 790 | 08.07.2014 20:40 XOLOO | | v Assembler, C, C++, Pascal, Java | 6 | 1192 | 30.12.2008 18:04 marian_sk | | v Ostatné programy | 2 | 2787 | 11.10.2008 22:26 dedko45 | | v HTML, XHTML, XML, CSS | 3 | 554 | 08.12.2011 22:14 shaggy | | v Zvuk | 12 | 9803 | 14.03.2009 23:15 rhonin37 | | v HTML, XHTML, XML, CSS | 2 | 479 | 25.08.2008 23:47 xxxmiroxxx |
|