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

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

Страницы: 1 2 Следующая »
#0
22:47, 6 июня 2015

Не получается подключить. перепробовал всё подряд, что в интернете нашёл. может у кого получилось?
язык D.

pragma(lib, "bass");
extern(C) bool BASS_SetVolume(float);
void main(){
  BASS_SetVolume(0.3);  
}

coffimplib.exe и implib.exe тоже использовал.

#1
0:05, 7 июня 2015

Че пишет то?

#2
0:19, 7 июня 2015

У меня все работает (с)

implib -a bass.lib bass.dll
dmd main.d

#3
23:20, 7 июня 2015

implib брал с http://www.digitalmars.com/
implib.exe /s mydll.lib mydll.dll
dmd main.d
main

object.Error@(0): Access Violation
----------------
0x00000001
0x0018FEBC
0x0040233F
0x00402257
0x00402037
0x74E37C04 in BaseThreadInitThunk
0x7732AD1F in RtlInitializeExceptionChain
0x7732ACEA in RtlInitializeExceptionChain

запускаю от админа

#4
0:01, 8 июня 2015

А авторы bass, оказываетсо мудаки.
Короче, calling convention не торт
правильно будет так:

extern(Windows) int BASS_SetVolume(float);

Но, lib файл придется генерить из def файла

implib bass.lib bass.def

с таким примерно содержимым:

LIBRARY bass
EXPORTS
    _BASS_SetVolume@4=BASS_SetVolume

И возвращается int, так как bass юзает мудацкий BOOL дефайнящийся в int.
Вот так вот.

#5
9:24, 8 июня 2015

спасибо тебе добрый человек. работает.

#6
10:17, 8 июня 2015

А как этак строчка будет выглядеть под линуксом?
> extern(Windows) int BASS_SetVolume(float);
Не extern(Linux) ведь?

#7
10:26, 8 июня 2015

Dimich
Под линуксом должно прокатить extern(C), если у авторов еще мозг где-то остался.

#8
12:16, 9 июня 2015

день добрый. работает да не работает.

LIBRARY bass
EXPORTS
  _BASS_SetVolume@4=BASS_SetVolume
  _BASS_GetVersion@0=BASS_GetVersion
import std.stdio;
pragma(lib, "bass.lib");
extern(Windows){  
  uint  BASS_SetVolume(float);
  uint  BASS_GetVersion();
}
void main(){
  auto setvolume  = BASS_SetVolume(0.3);
  auto getversion  = BASS_GetVersion();
  writefln("%s, %s", getversion, setvolume);
}
d:\MEGAsync\Development\D>implib /s bass.lib bass.def
Digital Mars Import Library Manager Version 7.6B1n
Copyright (C) Digital Mars 2000.  All Rights Reserved.
Output is a Windows WIN3 import library.
Digital Mars Import Library Creator complete.

d:\MEGAsync\Development\D>dmd main.d

d:\MEGAsync\Development\D>main
33819392, 0

ни в какую не хочет менять звук. (windows 8.1, x64)
хотя версию вытаскивает из bass

#9
13:24, 9 июня 2015

А документацию почитать?
http://www.un4seen.com/doc/#bass/BASS_SetVolume.html

#10
14:21, 9 июня 2015
LIBRARY bass
EXPORTS
  _BASS_SetVolume@4=BASS_SetVolume
  _BASS_GetVersion@0=BASS_GetVersion
  _BASS_ErrorGetCode@0=BASS_ErrorGetCode
  _BASS_Init@32=BASS_Init
import std.stdio;
pragma(lib, "bass.lib");
extern(C){  
  uint  BASS_GetVersion();
  uint  BASS_Init(int, uint, uint, uint, uint);
  uint  BASS_SetVolume(float);
  uint  BASS_ErrorGetCode();  
}
void main(){
  uint BASS_DEVICE_DEFAULT = 0;
  auto getversion= BASS_GetVersion();
  auto init= BASS_Init(-1, 44100, BASS_DEVICE_DEFAULT, 0, 0);
  auto setvolume= BASS_SetVolume(0.22);
  auto errorgetcode= BASS_ErrorGetCode();
  writefln("%s, %s, %s : %s", getversion, init, setvolume, errorgetcode);
}
d:\MEGAsync\Development\D>main
33819392, 1, 1 : 0

мда. внимательнее надо читать. спасибо.

в данном случае сработало и с extern(C)
lib через implib /s /noi bass.lib bass.dll

#11
17:29, 9 июня 2015

в BASS_GetDeviceInfo определена структура BASS_DEVICEINFO
не намекнёшь как указать?

extern(C) {
uint  BASS_GetDeviceInfo(uint, ???);
}

спасибо за помощь.

#12
18:10, 9 июня 2015

http://dlang.org/interfaceToC.html
Вот таблица как типы маппятся, если там указатель то он так и будет

#13
16:05, 10 июня 2015

день добрый. что то я делаю не так... хотя информация какая никакая получена.

alias uint  DWORD;
extern(C){  
  bool  BASS_GetDeviceInfo(DWORD, void* info);
}
void main(){
  struct BASS_DEVICEINFO{
        char  *name;
        char  *driver;
        DWORD  flags;
  }
  BASS_DEVICEINFO di;
  auto getdeviceinfo  = BASS_GetDeviceInfo(0, &di);
  writefln("%s, %s, %x", di.name, di.driver, di.flags);
}

d:\MEGAsync\Development\D>main
667308, 6673C8, 2000007
#14
16:31, 10 июня 2015

http://dlang.org/phobos/std_string.html#.fromStringz

Страницы: 1 2 Следующая »
ПрограммированиеФорумЗвук

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