ПрограммированиеФорумЗвук

как подцепить bass.dll с помощью D (2 стр)

Страницы: 1 2
#15
16:41, 10 июня 2015

спасибо. работает.

#16
20:30, 10 июня 2015

кириллица в командной строке 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);
}
#17
16:12, 11 июня 2015

В цикле получилось запустить только по вашему способу с extern(Windows) и ручным def  файлом

#18
1:22, 9 авг 2015

всем добрый вечер.

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);

прям в никакую не хочет.

#19
2:20, 9 авг 2015

Credence
Шо, падает небось или мусор пишет?
Точно внимательно читал, зачем "= void" нужно? Случайно так написать нельзя.

#20
22:21, 9 авг 2015

мдя. удалю пока никто не увидел. 
а по коду. да. падает. из всех найденных способов работает только если напрямую
И то хоть что то выводит.

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* я ещё не дочитал.

#21
14:44, 14 авг 2015

Добрый день. Как узнать длину полученной строки di.name, если она без '\n'?

#22
15:34, 14 авг 2015

http://dpaste.dzfl.pl/0a70b475a46d

#23
15:54, 14 авг 2015

прошу прощения. невнимательность меня погубит.
не '\n' а без \0.
di.name возвращается как char* без \0
while (*di.name) length++;  зацикливается

#24
16:08, 14 авг 2015

Credence
> while (*di.name) length++;
А теперь подумай еще раз, что написал.

#25
17:09, 14 авг 2015

подсмотрел тут http://stackoverflow.com/questions/18629554/how-to-concatenate-tw… in-c-language
while (*di.name) я так понял крутить пока не встретится \0, а его нет.

Страницы: 1 2
ПрограммированиеФорумЗвук

Тема в архиве.