[ 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 | 24
NapísalOffline : 01.06.2011 20:34 | C++ - pouzitie dll

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 | 66
Bydlisko: Žilina
NapísalOffline : 01.06.2011 20:40 | C++ - pouzitie dll

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 | 24
Napísal autor témyOffline : 01.06.2011 21:01 | C++ - pouzitie dll

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


Online

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

Registrovaný: 11.01.09
Prihlásený: 23.11.24
Príspevky: 1395
Témy: 10 | 10
Bydlisko: Hrinova
NapísalOnline : 02.06.2011 0:38 | C++ - pouzitie dll

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 | 24
Napísal autor témyOffline : 02.06.2011 10:24 | C++ - pouzitie dll

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 | 22
Bydlisko: Zilinska Un...
NapísalOffline : 02.06.2011 12:06 | C++ - pouzitie dll

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
Online

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

Registrovaný: 11.01.09
Prihlásený: 23.11.24
Príspevky: 1395
Témy: 10 | 10
Bydlisko: Hrinova
NapísalOnline : 02.06.2011 12:32 | C++ - pouzitie dll

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 | 22
Bydlisko: Zilinska Un...
NapísalOffline : 02.06.2011 12:48 | C++ - pouzitie dll

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
Online

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

Registrovaný: 11.01.09
Prihlásený: 23.11.24
Príspevky: 1395
Témy: 10 | 10
Bydlisko: Hrinova
NapísalOnline : 02.06.2011 21:06 | C++ - pouzitie dll

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 | 22
Bydlisko: Zilinska Un...
NapísalOffline : 02.06.2011 23:17 | C++ - pouzitie dll

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ý: 04.07.24
Príspevky: 815
Témy: 23 | 23
Bydlisko: Bratislava
NapísalOffline : 03.06.2011 10:02 | C++ - pouzitie dll

ja to mám takto: :D

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


Online

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

Registrovaný: 11.01.09
Prihlásený: 23.11.24
Príspevky: 1395
Témy: 10 | 10
Bydlisko: Hrinova
NapísalOnline : 03.06.2011 13:38 | C++ - pouzitie dll

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ý: 04.07.24
Príspevky: 815
Témy: 23 | 23
Bydlisko: Bratislava
NapísalOffline : 11.07.2011 15:00 | C++ - pouzitie dll

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 | 22
Bydlisko: Zilinska Un...
NapísalOffline : 11.07.2011 16:15 | C++ - pouzitie dll

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
 [ Príspevkov: 14 ] 


C++ - pouzitie dll



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

525

02.10.2007 14:20

DevilMayCry

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

277

19.11.2011 14:29

Loko11

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

402

05.02.2016 12:57

Elendil

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

1301

06.01.2010 19:48

prandof

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

391

18.01.2017 8:51

mackooo

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

581

18.04.2009 9:49

Horalka

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

617

26.09.2007 13:22

kolci

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

3430

23.01.2013 19:02

personal compuper

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

Run DLL problém (tsiVi032.dll)

v Ostatné

4

600

15.09.2013 0:09

Marko289

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

user32.dll alebo SHELL32.dll

v Operačné systémy Microsoft

1

818

11.08.2010 19:15

Revolution

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

790

08.07.2014 20:40

XOLOO

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

dll

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

6

1192

30.12.2008 18:04

marian_sk

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

.dll

v Ostatné programy

2

2787

11.10.2008 22:26

dedko45

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

Pouzitie FORM

v HTML, XHTML, XML, CSS

3

554

08.12.2011 22:14

shaggy

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

SPDIF pouzitie

v Zvuk

12

9803

14.03.2009 23:15

rhonin37

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

použitie FLOAT

v HTML, XHTML, XML, CSS

2

479

25.08.2008 23:47

xxxmiroxxx



© 2005 - 2024 PCforum, edited by JanoF