Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[WinAPI] Problem z funkcją "GetLogicalDriveStrings()" (lekcja 4 kursu WinAPI)

Ostatnio zmodyfikowano 2016-10-25 10:25
Autor Wiadomość
pan_sansik
Temat założony przez niniejszego użytkownika
[WinAPI] Problem z funkcją "GetLogicalDriveStrings()" (lekcja 4 kursu WinAPI)
» 2016-10-23 20:15:32
Witam wszystkich,
kiedy wywołuję funkcję GetLogicalDriveStrings(), to w buforze, zamiast liter wszystkich partycji (mam ich łącznie 8), mam tylko "C:\"(czyli jedną). Funkcja nie chce mi "wykryć" reszty partycji. Co jest tym spowodowane?
Zamieszczam kod, dla pewności :
C/C++
#include <iostream>
#include <windows.h>

using namespace std;

int main()
{
    const WORD rozmiar_buforka = 120;
    LPSTR Bufor =( LPSTR ) GlobalAlloc( GPTR, rozmiar_buforka );
    DWORD Wymagane = GetLogicalDriveStringsA( rozmiar_buforka, Bufor );
   
    if( Wymagane > rozmiar_buforka )
    {
        cout << "Przepraszamy, za maly buforek. Potrzeba : " << Wymagane << " bajtow.";
        return 1;
    }
   
    cout << "buforek : " << Bufor << endl;
   
    GlobalFree( Bufor );
   
   
    system( "pause" );
    return 0;
}
P-152829
pekfos
» 2016-10-23 20:47:17
https://msdn.microsoft.com​/pl-pl/library/windows/desktop​/aa364975(v=vs.85).aspx
lpBuffer [out]

    A pointer to a buffer that receives a series of null-terminated strings, one for each valid drive in the system, plus with an additional null character.


To tyle w temacie "problemu" z tą funkcją.

//edit:
Jeśli podamy jej rozmiar i adres bufora znaków, to ona wypełni go wszystkimi dostępnymi literkami dysków, porozdzielanymi przez znaki zerowe, a na końcu tej wyliczanki postawi podwójny znak zerowy.
[..]
C/C++
cout << "Dostepne dyski:" << endl;
do {
    koniec = 0;
    if( Bufor[ i ] != 0 ) cout << Bufor[ i ];
    else { cout << endl; flaga = 0; }
} while( Bufor[ ++i ] != 0 || flaga );

GlobalFree( Bufor );
Nawet w kursie miałeś wprost podaną odpowiedź. Po co w ogóle się powołujesz na kurs, skoro przybiegłeś tu z problemem po przeczytaniu ledwie nazwy funkcji..?
P-152830
j23
» 2016-10-24 11:12:46
Nieco prościej:
C/C++
LPSTR p = Bufor;

while( * p )
{
    std::cout << p << '\n';
    p += strlen( p ) + 1;
}
P-152856
pan_sansik
Temat założony przez niniejszego użytkownika
» 2016-10-25 10:25:12
O kurde faktycznie, teraz widzę jak się wydurniłem, dzięki za pomoc
P-152906
« 1 »
  Strona 1 z 1