purebasic.info

PureBasic forum
Текущее время: Вт ноя 19, 2019 2:16 pm

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 10 ] 
Автор Сообщение
 Заголовок сообщения: помогите разобраться с ayfly
СообщениеДобавлено: Ср окт 16, 2019 7:37 pm 
Не в сети
профессор

Зарегистрирован: Сб апр 16, 2011 8:59 am
Сообщений: 242
Благодарил (а): 4 раз.
Поблагодарили: 2 раз.
Пункты репутации: 0
DLL и сырки тут: https://code.google.com/archive/p/ayfly/downloads

суть проблемы: не запускается ay_initsongindirect

файл приложил.

спасибо.


Вложения:
Criminal - Tv-x (1998).zip [2.22 KiB]
Скачиваний: 25

_________________
Захотелось мартышки любви со слоном, тут она и лопнула
Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: помогите разобраться с ayfly
СообщениеДобавлено: Сб окт 19, 2019 5:35 pm 
Не в сети
профессор

Зарегистрирован: Пн июл 22, 2013 11:00 pm
Сообщений: 914
Благодарил (а): 2 раз.
Поблагодарили: 45 раз.
Пункты репутации: 9
Это читали? https://github.com/l29ah/ayfly/blob/mas ... API.README
Может эта функция нужна initsong а initsongindirect как бы инициализирует модуль в памяти? :roll:


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: помогите разобраться с ayfly
СообщениеДобавлено: Сб окт 19, 2019 5:40 pm 
Не в сети
профессор

Зарегистрирован: Сб апр 16, 2011 8:59 am
Сообщений: 242
Благодарил (а): 4 раз.
Поблагодарили: 2 раз.
Пункты репутации: 0
Читал я уже документацию.
Загружаю файл в выделенную память и вызываю initsongindirect, валится при вызове.

_________________
Захотелось мартышки любви со слоном, тут она и лопнула


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: помогите разобраться с ayfly
СообщениеДобавлено: Пн окт 21, 2019 8:03 am 
Не в сети
профессор

Зарегистрирован: Сб апр 16, 2011 8:59 am
Сообщений: 242
Благодарил (а): 4 раз.
Поблагодарили: 2 раз.
Пункты репутации: 0
Музон заиграл, но в окошке


Вложения:
ayf_hwnd.zip [3.96 KiB]
Скачиваний: 20

_________________
Захотелось мартышки любви со слоном, тут она и лопнула
Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: помогите разобраться с ayfly
СообщениеДобавлено: Ср окт 23, 2019 5:13 am 
Не в сети
профессор

Зарегистрирован: Сб апр 16, 2011 8:59 am
Сообщений: 242
Благодарил (а): 4 раз.
Поблагодарили: 2 раз.
Пункты репутации: 0
в описании API черт ногу сломит. Заиграло.


Вложения:
ayf_2.zip [124.86 KiB]
Скачиваний: 22

_________________
Захотелось мартышки любви со слоном, тут она и лопнула
Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: помогите разобраться с ayfly
СообщениеДобавлено: Ср окт 23, 2019 5:59 am 
Не в сети
профессор

Зарегистрирован: Пн июл 22, 2013 11:00 pm
Сообщений: 914
Благодарил (а): 2 раз.
Поблагодарили: 45 раз.
Пункты репутации: 9
В Prototype укажи Prototype.i или.qx64(где возвращаемые значения указателя и для других другие типы). :roll:


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: помогите разобраться с ayfly
СообщениеДобавлено: Ср окт 23, 2019 6:07 am 
Не в сети
профессор

Зарегистрирован: Сб апр 16, 2011 8:59 am
Сообщений: 242
Благодарил (а): 4 раз.
Поблагодарили: 2 раз.
Пункты репутации: 0
zogчем?

_________________
Захотелось мартышки любви со слоном, тут она и лопнула


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: помогите разобраться с ayfly
СообщениеДобавлено: Ср окт 23, 2019 8:49 pm 
Не в сети
профессор

Зарегистрирован: Пн июл 22, 2013 11:00 pm
Сообщений: 914
Благодарил (а): 2 раз.
Поблагодарили: 45 раз.
Пункты репутации: 9
egons писал(а):
zogчем?

Затем что бы компилятор понимал что возвращается,если в каких и прокатит то вдругих с float,long,char(s)врятли. :roll:


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: помогите разобраться с ayfly
СообщениеДобавлено: Чт окт 24, 2019 12:55 am 
Не в сети
профессор

Зарегистрирован: Пн июл 22, 2013 11:00 pm
Сообщений: 914
Благодарил (а): 2 раз.
Поблагодарили: 45 раз.
Пункты репутации: 9
А самый прикол в стеке,так как он не восстанавливается(типа процедур в либе gdecl)а он не безразмерный...... :roll:
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
 
;void *ay_initsongindirect(unsigned char *Module, unsigned long sr, AY_CHAR *type, unsigned long size, AbstractAudio *player = 0);
;Данная функция делает то же самое, что и предыдущая, за исключением того, что инициализирует модуль,
;уже загруженный в облась
;памяти, начиная с адреса Module, имеющим длину size. Переменная type должна содержать либо путь
;к модулю, либо его расширение
;в формате «.расширение». Это нужно для правильного выбора проигрывателя.
Prototype.i ay_initsongindirect(*m, sr.l,size.l,ap.l)
 
Prototype ay_startsong(*i)
 
;void *ay_initsong(const AY_CHAR *FilePath, unsigned long sr, AbstractAudio *player = 0);
;Данная функция загружает модуль, путь к которому определяется переменной FilePath
;и определяет частоту дискретизации равной значению переменной sr. Если переменная
;player = 0, тогда дополнительно инициализируется драйвер вывода звука для данного модуля.
;Иначе player доложен указывать на реализацию класса, наследуемого от AbstractAudio.
;Возвращаемое значение — указатель на структуру aysonginfo, который в дальнейшем используется
;во всех функциях управления, либо 0, если модуль не может быть инициализрован по какой-либо причине.
Prototype ay_initsong(*fp,sr.l,ap.l)
 
; void *ay_getsonginfoindirect(unsigned char *Module, AY_CHAR *type, unsigned long size);
; Данные функции также возвращают указатель на структуру aysonginfo, который служит лишь
;для того, чтобы впоследствии получать такую информацию о модуле, как название, автор,
;время проигрывания, и т.п. Модуль не может быть проигран с помощью возвращаемого значения.
Prototype ay_getsonginfoindirect(*m,*st,size.l)
 
; void ay_sethwnd(void *info, HWND hWnd);
; Устанавливает дестриптор окна для текущего плеера, равному переменной hWnd.
Prototype ay_sethwnd(*i, hWnd.l)
 
; void ay_stopsong(void *info);
; Останавливает воспроизведение модуля.
Prototype ay_stopsong(*i)
 
; const unsigned char *ay_getregs(void *info, unsigned char chip_num = 0);
; Возвращает указатель на струкруру из 16-ти байт, которая содержит текущий
; снимок регистров чипа AY под номером chip_num. ВОзвращаемая структура доступна только для чтения.
Prototype ay_getregs(*i, chip_num.l)
d.i
      !mov dword[v_d],esp
      Debug d
If OpenLibrary(0, "ayfly.dll")
  initsongindirect.ay_initsongindirect = GetFunction(0, "ay_initsongindirect")
  initsong.ay_initsong = GetFunction(0, "ay_initsong")
  startsong.ay_startsong = GetFunction(0, "ay_startsong")
  sethwnd.ay_sethwnd = GetFunction(0, "ay_sethwnd")
  stopsong.ay_stopsong = GetFunction(0, "ay_stopsong")
  getsonginfoindirect.ay_getsonginfoindirect = GetFunction(0, "ay_getsonginfoindirect")
  getregs.ay_getregs = GetFunction(0, "ay_getregs")
EndIf
 
;*i=initsong(@"d:\ayf\Criminal - Tv-x (1998).pt3",44100,0)
ms.l=?mus_e-?mus
Debug ms
   !mov dword[v_d],esp
   Debug d
  *i=initsongindirect(?mus,44100,ms,0)
      !mov dword[v_d],esp
   Debug d
!add dword esp,16
 
 
If OpenWindow(0, 0, 0, 250, 90, "ayfly", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  TextGadget(0, 0,  0, 250, 20, "")
 
  AddWindowTimer(0,123,50)
     !mov dword[v_d],esp
   Debug d
   sethwnd( *i,WindowID(0) )
      !mov dword[v_d],esp
      Debug d
      !add dword esp,8
           !mov dword[v_d],esp
      Debug d
   startsong(*i)
      !mov dword[v_d],esp
      Debug d
      !add dword esp,4
      !mov dword[v_d],esp
      Debug d
  Repeat
    Event = WaitWindowEvent()
   
    If event=#PB_Event_Timer
       !mov dword[v_d],esp
      Debug d
      *r=getregs(*i,0)
            !mov dword[v_d],esp
            Debug d
        !add dword esp,8;если не зделать в цикле то стек не хило улетит........  
      SetGadgetText(0, "A"+RSet("",PeekA(*r)&15,"-") )
    EndIf
   
    Select Event
    EndSelect
  Until Event = #PB_Event_CloseWindow
EndIf
      ;!mov dword[v_d],esp
      ;Debug d
stopsong(*i)
     ; !mov dword[v_d],esp
      ;Debug d
    !add dword esp,4
 
DataSection
  mus:
 IncludeBinary "Criminal - Tv-x (1998).pt3"
  ;IncludeBinary "complications_tune.STC"
  mus_e:
 



Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: помогите разобраться с ayfly
СообщениеДобавлено: Чт окт 24, 2019 9:01 pm 
Не в сети
профессор

Зарегистрирован: Сб апр 16, 2011 8:59 am
Сообщений: 242
Благодарил (а): 4 раз.
Поблагодарили: 2 раз.
Пункты репутации: 0
Дизассемблер .dll показал другое. Я сопоставил с исходником и сравнил работу с отладчиком. Тип чиптюна не указывается. Зачем Abstract Player=0 неясно.

И причина не в стеке, а в том, что процедура использует переданные данные иначе, и случается факап. Похоже, что изменения кода не отразились на документации.

Такие дела.

_________________
Захотелось мартышки любви со слоном, тут она и лопнула


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 10 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB