Obsah fóra
PravidláRegistrovaťPrihlásenie




Odpovedať na tému [ Príspevkov: 14 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 22.05.10
Prihlásený: 09.12.15
Príspevky: 42
Témy: 24
Príspevok NapísalOffline : 01.06.2011 20:34

Dobry den,

mam jednu funkciu ulozenu v dll subore. Co mam urobit, aby som tu funkciu mohol pouzit?


Offline

Skúsený užívateľ
Skúsený užívateľ
C++ - pouzitie dll

Registrovaný: 24.01.08
Prihlásený: 13.09.17
Príspevky: 14572
Témy: 66
Bydlisko: Žilina
Príspevok NapísalOffline : 01.06.2011 20:40

musíš si importnúť danú knižnicu a fičíš ;) avšak daná "funkcia" atď musia mať povolený prístup zvonku...







_________________
C#, PHP, ...
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 22.05.10
Prihlásený: 09.12.15
Príspevky: 42
Témy: 24
Príspevok Napísal autor témyOffline : 01.06.2011 21:01

a ako ju mam importnut v dev-c++?


Offline

Skúsený užívateľ
Skúsený užívateľ
C++ - pouzitie dll

Registrovaný: 11.01.09
Prihlásený: 25.04.24
Príspevky: 1385
Témy: 9
Bydlisko: Hrinova
Príspevok NapísalOffline : 02.06.2011 0:38

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 ).


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 22.05.10
Prihlásený: 09.12.15
Príspevky: 42
Témy: 24
Príspevok Napísal autor témyOffline : 02.06.2011 10:24

ok diky


Offline

Užívateľ
Užívateľ
C++ - pouzitie dll

Registrovaný: 02.11.07
Prihlásený: 18.03.15
Príspevky: 470
Témy: 22
Bydlisko: Zilinska Un...
Príspevok NapísalOffline : 02.06.2011 12:06

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
Offline

Skúsený užívateľ
Skúsený užívateľ
C++ - pouzitie dll

Registrovaný: 11.01.09
Prihlásený: 25.04.24
Príspevky: 1385
Témy: 9
Bydlisko: Hrinova
Príspevok NapísalOffline : 02.06.2011 12:32

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.


Offline

Užívateľ
Užívateľ
C++ - pouzitie dll

Registrovaný: 02.11.07
Prihlásený: 18.03.15
Príspevky: 470
Témy: 22
Bydlisko: Zilinska Un...
Príspevok NapísalOffline : 02.06.2011 12:48

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
Offline

Skúsený užívateľ
Skúsený užívateľ
C++ - pouzitie dll

Registrovaný: 11.01.09
Prihlásený: 25.04.24
Príspevky: 1385
Témy: 9
Bydlisko: Hrinova
Príspevok NapísalOffline : 02.06.2011 21:06

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 -lnazov_kniznice_bez_pripony

// ak sa kniznica nenachadza v zlozke s programom, pripadne v systemovej zlozke, tak pri kompilacii treba uviest este flag -Lcesta_ku_kniznici


Offline

Užívateľ
Užívateľ
C++ - pouzitie dll

Registrovaný: 02.11.07
Prihlásený: 18.03.15
Príspevky: 470
Témy: 22
Bydlisko: Zilinska Un...
Príspevok NapísalOffline : 02.06.2011 23:17

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
Offline

Užívateľ
Užívateľ
C++ - pouzitie dll

Registrovaný: 14.03.11
Prihlásený: 02.08.23
Príspevky: 814
Témy: 23
Bydlisko: Bratislava
Príspevok NapísalOffline : 03.06.2011 10:02

ja to mám takto: :D

Kód:
using namespace System::Configuration;   // <===
#using <System.Configuration.dll>   // <===


Offline

Skúsený užívateľ
Skúsený užívateľ
C++ - pouzitie dll

Registrovaný: 11.01.09
Prihlásený: 25.04.24
Príspevky: 1385
Témy: 9
Bydlisko: Hrinova
Príspevok NapísalOffline : 03.06.2011 13:38

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.
Offline

Užívateľ
Užívateľ
C++ - pouzitie dll

Registrovaný: 14.03.11
Prihlásený: 02.08.23
Príspevky: 814
Témy: 23
Bydlisko: Bratislava
Príspevok NapísalOffline : 11.07.2011 15:00

Fico píše:
Tak toto skor vyzera na C#, my sa bavime o C++ ...



Blbé, ja to tak mám v C++.


Offline

Užívateľ
Užívateľ
C++ - pouzitie dll

Registrovaný: 02.11.07
Prihlásený: 18.03.15
Príspevky: 470
Témy: 22
Bydlisko: Zilinska Un...
Príspevok NapísalOffline : 11.07.2011 16:15

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
Odpovedať na tému [ Príspevkov: 14 ] 


Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy. C:\WINDOWS\WebAssist.dll - čo to je?

v Antivíry a antispywary

2

500

02.10.2007 14:20

DevilMayCry Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Visual C++ 2008 použitie classu z class library

v Assembler, C, C++, Pascal, Java

0

247

19.11.2011 14:29

Loko11 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. dynamicka struktura, bool a pouzitie vo funkcii C++ otazka

v Assembler, C, C++, Pascal, Java

3

376

05.02.2016 12:57

Elendil Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Subor C:\users\AppData\Local\Temp\pmnmjIcy.dll nebol najdeny

v Operačné systémy Microsoft

8

1265

06.01.2010 19:48

prandof Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. php_mssql.dll (tiež sqlsrv.dll) problém, podobne ADOdb

v PHP, ASP

2

366

18.01.2017 8:51

mackooo Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Problem s kniznicou shell32.dll a sti.dll

v Operačné systémy Microsoft

3

555

18.04.2009 9:49

Horalka Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. user32.dll a shell32.dll Nepovolene premiestnenie...???

v Operačné systémy Microsoft

0

576

26.09.2007 13:22

kolci Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. C:\PROGRA~2\Google\GOOGLE~3\GO36F4~1.DLL

[ Choď na stránku:Choď na stránku: 1, 2 ]

v Antivíry a antispywary

36

3312

23.01.2013 19:02

personal compuper Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. user32.dll alebo SHELL32.dll

v Operačné systémy Microsoft

1

757

11.08.2010 19:15

Revolution Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Run DLL problém (tsiVi032.dll)

v Ostatné

4

577

15.09.2013 0:09

Marko289 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Mám sa učiť C ++/objective C/ C#?

v Assembler, C, C++, Pascal, Java

5

732

08.07.2014 20:40

XOLOO Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. dll

v Assembler, C, C++, Pascal, Java

6

1138

30.12.2008 18:04

marian_sk Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. .dll

v Ostatné programy

2

2750

11.10.2008 22:26

dedko45 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. SPDIF pouzitie

v Zvuk

12

9762

14.03.2009 23:15

rhonin37 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. použitie FLOAT

v HTML, XHTML, XML, CSS

2

451

25.08.2008 23:47

xxxmiroxxx Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. pouzitie fotky

v Webdesign

3

858

25.05.2009 12:33

lio Zobrazenie posledných príspevkov


Nemôžete zakladať nové témy v tomto fóre
Nemôžete odpovedať na témy v tomto fóre
Nemôžete upravovať svoje príspevky v tomto fóre
Nemôžete mazať svoje príspevky v tomto fóre

Skočiť na:  

Powered by phpBB Jarvis © 2005 - 2024 PCforum, webhosting by WebSupport, secured by GeoTrust, edited by JanoF
Ako väčšina webových stránok aj my používame cookies. Zotrvaním na webovej stránke súhlasíte, že ich môžeme používať.
Všeobecné podmienky, spracovanie osobných údajov a pravidlá fóra