cum accesez un dispozitiv in windows?

Intrebari despre limbajul C++, standardul C++, STL, OOP in C++ sau alte subiecte nelegate de VisualC++
Post Reply
bogdanc
Junior
Junior
Posts: 6
Joined: 23 Sep 2012, 18:01
Judet: Bucureşti

cum accesez un dispozitiv in windows?

Post by bogdanc » 23 Sep 2012, 18:28

Buna ziua,as vrea sa stiu cum pot accesa prin cod c sau c++ un dispozitiv,in windows(ex. cdrom)
Se face prin apelarea driver-ului sau fisierelor .dll? Cum pot afla ce argumente primesc/returneaza fisierele respective?
Multumesc mult!



User avatar
Ovidiu Cucu
Fondator
Fondator
Posts: 3778
Joined: 11 Jul 2007, 16:10
Judet: Iaşi
Location: Iasi
Contact:

Re: cum accesez un dispozitiv in windows?

Post by Ovidiu Cucu » 24 Sep 2012, 08:31

Problema e pusa destul de neclar si la modul general, incerc insa sa o descalcesc (vii cumva din lumea *NIX? ;)).
Raspunsul scurt: ai N metode si posibilitati.

Mai pe larg:
In Windows API, pentru a deschide un dispozitiv de intrare/iesire (fisier, disc, volum, etc) in user-mode se poate folosi functia CreateFile.
CreateFile intoarce un HANDLE, pe care-l folosesti in continuare pentru operatii cu device-ul respectiv (citire, scriere, etc).
Vezi File Management Functions in Windows Dev Center.

Alternativ, poti folosi functii/clase din CRT, STL, MFC etc, care in fond si la urma urmei folosesc in spate tot WinAPI.

Functiile din WinAPI sunt exportate in general din DLL-uri. Ai doua posibilitati de a le apela in program:
  1. Incarci DLL-ul la run-time cu LoadLibrary si apoi obtii un pointer la functie cu GetProcAddress.
  2. Folosind Windows SDK, incluzi header-ul in care sunt declarate functiile si te legi la LIB-ul corespunzator.
Pentru functiile WinAPI uzuale (incluzand cele de care vorbim) metoda #2 este mai usoara si mai des folosita.

Atat timp cat lucrezi in user-mode, nu te intereseaza / nu ai nevoie sa stii care sunt si ce fac driverele in spate.
Celalalt mod cu care opereaza Windows-ul (kernel-mode, in care printre altele poti avea acces direct la device-uri) este pentru sistem si pentru cei care fac ei insisi drivere.

In fine, la ce "argumente" te referi?

bogdanc
Junior
Junior
Posts: 6
Joined: 23 Sep 2012, 18:01
Judet: Bucureşti

Re: cum accesez un dispozitiv in windows?

Post by bogdanc » 24 Sep 2012, 14:26

Va multumesc enorm!!! Desi studiez aceasta carte "Totul despre Csi C++",subiectul respectiv nu este abordat nici macar la mod general,doar intr-o mica sectiune se explica cum se incarca un driver(amarat) din dos pt a schimba culoarea fundalului/textului la consola.Toate cele bune,o zi buna!

User avatar
Ovidiu Cucu
Fondator
Fondator
Posts: 3778
Joined: 11 Jul 2007, 16:10
Judet: Iaşi
Location: Iasi
Contact:

Re: cum accesez un dispozitiv in windows?

Post by Ovidiu Cucu » 24 Sep 2012, 14:54

"Totul despre C/C++", ca multe alte carti numite "Totul despre..." este un bullshit mare si greu cu care ai putea cel mult sa spargi capul dusmanilor tai. :D
Vezi ca am mai discutat problema prin forum, inclusiv despre cam ce carti ar fi bune ca sa inveti limbajul C++ si programarea Windows.

neagu_laurentiu
Membru++
Membru++
Posts: 919
Joined: 23 Jul 2007, 11:32

Re: cum accesez un dispozitiv in windows?

Post by neagu_laurentiu » 24 Sep 2012, 15:05

bogdanc wrote:subiectul respectiv nu este abordat
Amesteci capra cu varza. Una e limbajul de programare si asta vrea sa te invete cartea in cauza (iar aici putem discuta fiindca e mai veche fata de standarde) si cu totul alta mancare de peste sunt bibliotecile & interfetele puse la dispozitie de un sistem de operare ori mediul de dezvoltare (IDE-ul) s.a.m.d. Nu le amesteca.

User avatar
Ovidiu Cucu
Fondator
Fondator
Posts: 3778
Joined: 11 Jul 2007, 16:10
Judet: Iaşi
Location: Iasi
Contact:

Re: cum accesez un dispozitiv in windows?

Post by Ovidiu Cucu » 24 Sep 2012, 15:33

[ off-topic ]
neagu_laurentiu wrote:
bogdanc wrote:subiectul respectiv nu este abordat
Amesteci capra cu varza. Una e limbajul de programare [...] si cu totul alta mancare de peste sunt bibliotecile [...]
Amestecul caprei cu varza este facut de obicei de programatorii ce folosesc limbaje dependente de framework (C#, Java etc). :)

[later edit]
Exista si in C++ o specie mutanta de amestecatori de capre cu verze, pe care daca-i intreaba cineva "Ce carte recomandati ca sa invat C++?", raspund pe nerasuflate "Disign Patterns". :D

bogdanc
Junior
Junior
Posts: 6
Joined: 23 Sep 2012, 18:01
Judet: Bucureşti

Re: cum accesez un dispozitiv in windows?

Post by bogdanc » 25 Sep 2012, 01:57

Da,din pacate WinApi prezentat in carte functioneaza doar sub win 95 si NT.Dar asta am aflat mult prea tarziu...dupa ce am cumparat-o.Scuze de offtopic.

User avatar
Ovidiu Cucu
Fondator
Fondator
Posts: 3778
Joined: 11 Jul 2007, 16:10
Judet: Iaşi
Location: Iasi
Contact:

Re: cum accesez un dispozitiv in windows?

Post by Ovidiu Cucu » 25 Sep 2012, 13:08

bogdanc wrote:Da,din pacate WinApi prezentat in carte functioneaza doar sub win 95 si NT.
Poti, te rog, pune aici un exemplu?
bogdanc wrote:Dar asta am aflat mult prea tarziu...dupa ce am cumparat-o.
Pentru asa ceva exista Anticariat si centre de colectare maculatura. ;)

User avatar
MrSmersh
Microsoft MVP
Microsoft MVP
Posts: 289
Joined: 20 Jul 2007, 10:18
Location: Timisoara
Contact:

Re: cum accesez un dispozitiv in windows?

Post by MrSmersh » 29 Sep 2012, 21:59

Pina si eu sar cod care sa maerga doar pe 95 si NT?!!
Sa nu pomenim de Richter :biggrin: ca, cu exceptii clare in vreo 5 min il faci sa mearga pe orice (pe 8 nu am incercat inca recunosc)

User avatar
Ovidiu Cucu
Fondator
Fondator
Posts: 3778
Joined: 11 Jul 2007, 16:10
Judet: Iaşi
Location: Iasi
Contact:

Re: cum accesez un dispozitiv in windows?

Post by Ovidiu Cucu » 30 Sep 2012, 07:44

MrSmersh wrote:Pina si eu sar cod care sa maerga doar pe 95 si NT?!!
Sa nu pomenim de Richter :biggrin: ca, cu exceptii clare in vreo 5 min il faci sa mearga pe orice (pe 8 nu am incercat inca recunosc)
Richter a scris cartile pentru Windows, nu pentru "8"... :biggrin:

bogdanc
Junior
Junior
Posts: 6
Joined: 23 Sep 2012, 18:01
Judet: Bucureşti

Re: cum accesez un dispozitiv in windows?

Post by bogdanc » 30 Sep 2012, 09:09

Cred ca m-am exprimat gresit.Cartea in cauza a fost editata in '97.Autorii scriau ca,functiile winapi functionau pe win 95 si NT la vremea respectiva os-uri recente.
Nu prea cunosc winapi/gui,nu am avut timp sa testez personal functiile respective,deci nu stiu daca functioneaza si sub xp/vista/7.

neagu_laurentiu
Membru++
Membru++
Posts: 919
Joined: 23 Jul 2007, 11:32

Re: cum accesez un dispozitiv in windows?

Post by neagu_laurentiu » 30 Sep 2012, 12:36

bogdanc wrote:Cred ca m-am exprimat gresit.
Nu. Nu stii cu se mananca povestea.
WinAPI e cam acelasi de cand era pe 16 biti. Schimbarile la nivelul interfetei expuse programatorului sunt neglijabile.

Post Reply