спасибо. работает.
кириллица в командной строке windows
import std.stdio; import std.string; import std.conv; import std.windows.charset; pragma(lib, "bass.lib"); alias uint DWORD; extern(C){ void BASS_SetConfig(uint, bool); bool BASS_GetDeviceInfo(DWORD, void* info); } void main(){ uint BASS_CONFIG_UNICODE = 42; BASS_SetConfig(BASS_CONFIG_UNICODE, true); struct BASS_DEVICEINFO{ char *name; char *driver; DWORD flags; } BASS_DEVICEINFO di; auto getdeviceinfo = BASS_GetDeviceInfo(1, &di); writefln("%s, %s, %x", fromStringz(toMBSz(to!string(di.name), 1)), fromStringz(toMBSz(to!string(di.driver), 1)), di.flags); }
В цикле получилось запустить только по вашему способу с extern(Windows) и ручным def файлом
всем добрый вечер.
string text_; for (int i = 1; BASS_GetDeviceInfo(i, &di); i++){ text_ ~= di.name.to!(string) ~ "\n"; } //wstring ws; //transcode(text_, ws); // UTF-8 to UTF-16 MessageBoxW(null, "", text_.toUTF16z, MB_OK | MB_ICONERROR);
прям в никакую не хочет.
Credence
Шо, падает небось или мусор пишет?
Точно внимательно читал, зачем "= void" нужно? Случайно так написать нельзя.
мдя. удалю пока никто не увидел.
а по коду. да. падает. из всех найденных способов работает только если напрямую
И то хоть что то выводит.
char* text_; for (int i = 1; BASS_GetDeviceInfo(i, &di); i++){ text_ = di.name; } //wstring ws; //transcode(text_, ws); // UTF-8 to UTF-16 MessageBoxA(null, text_, "", MB_OK | MB_ICONERROR);
Понимаю, что так сделать бессмысленно MessageBoxW(null, cast(const(wchar)*) text_, "", MB_OK | MB_ICONERROR);
так как надо не просто вывести а преобразовать.
до того как связать два char* я ещё не дочитал.
Добрый день. Как узнать длину полученной строки di.name, если она без '\n'?
прошу прощения. невнимательность меня погубит.
не '\n' а без \0.
di.name возвращается как char* без \0
while (*di.name) length++; зацикливается
Credence
> while (*di.name) length++;
А теперь подумай еще раз, что написал.
подсмотрел тут http://stackoverflow.com/questions/18629554/how-to-concatenate-tw… in-c-language
while (*di.name) я так понял крутить пока не встретится \0, а его нет.
Тема в архиве.