GetLogicalDriveStrings

0

Mam problem z użyciem tej funkcji. Napisałem coś takiego:

const WORD nBufferSize = 40;
LPSTR Bufor = (LPSTR)GlobalAlloc(GPTR, nBufferSize);
DWORD glds;
string dyski;

glds = GetLogicalDriveStrings(nBufferSize, Bufor);
dyski = Bufor;
cout << dyski << "\n" << glds << "\n";

Miałem nadzieję, że wyświetlą się wszystkie dyski, ale pokazuje tylko jeden. Czy zrobiłem coś źle??

0
#include <iostream>
#include <tchar.h>
#include <windows.h>

using namespace std;

#ifdef _UNICODE
    #define output wcout
#else
    #define output cout
#endif

int main() {
    const size_t buffer_size = 26*4 + 1;
    TCHAR buffer[buffer_size];

    GetLogicalDriveStrings( buffer_size, buffer);

    for(LPTSTR c = buffer; *c; c+=1+_tcslen(c) )
        output << c << endl;
    
    return 0;
    }

40 znaków to za mało w ogólnym przypadku. liter łacińskich jest 26, więc dysków też. każdy dysk to minimum 4 znaki: A:<NULL>

tablica którą dostajesz to kupa stringów oddzielona NULLami, musisz przeglądnąć tę tablicę, przeskakując od napisu do napisu. jak spróbujesz wypisać bufor, to pisanie stanie po napotkaniu pierwszego NULLa, a bufor zawiera:

dysk<NULL>dysk<NULL> ... <NULL>dysk<NULL><NULL>

używasz LPSTR - ok, to się dostosowałem, i masz to napisane w stylu unicode-friendly

0

Wielkie dzieki...

1 użytkowników online, w tym zalogowanych: 0, gości: 1