DirrectSound

Тема в разделе "Библиотеки и интерфейсы", создана пользователем wcools, 26 май 2009.

  1. wcools

    wcools New Member

    Публикаций:
    0
    Регистрация:
    7 сен 2008
    Сообщения:
    89
    В SDK прочитал как возпроизвезти wav файл.
    invoke DirectSoundCreate8, 0, pDirectSound, 0

    Что такое pDirectSound ???
     
  2. barton

    barton New Member

    Публикаций:
    0
    Регистрация:
    19 июл 2008
    Сообщения:
    164
    Адрес:
    Czechoslovakia
    Указатель на то, что получит указатель на интерфейс при создании экземпляра COM-компонента

    меня прет: вы что, вообще мсдн не читаете? http://msdn.microsoft.com/en-us/library/bb219693(VS.85).aspx
     
  3. wcools

    wcools New Member

    Публикаций:
    0
    Регистрация:
    7 сен 2008
    Сообщения:
    89
    Как заполнить pDirectSound ??? В мсдн все по английски и не понятно.
     
  4. Microedition

    Microedition Active Member

    Публикаций:
    0
    Регистрация:
    5 июн 2008
    Сообщения:
    814
    pDirectSound - это переменная типа DWORD, которая может находится в секции .data или .bss
    А заполняется она при вызове DirectSoundCreate8
     
  5. Microedition

    Microedition Active Member

    Публикаций:
    0
    Регистрация:
    5 июн 2008
    Сообщения:
    814
    Точнее, после вызова DirectSoundCreate8.
    Туда кладется указатель на интерфейс IDirectSound (или как его?..)
     
  6. Microedition

    Microedition Active Member

    Публикаций:
    0
    Регистрация:
    5 июн 2008
    Сообщения:
    814
    Используя этот указатель, вы можете обращатся к методам IDirectSound'a.
     
  7. wcools

    wcools New Member

    Публикаций:
    0
    Регистрация:
    7 сен 2008
    Сообщения:
    89
    Спасибо, теперь понятнее. Еще вопрос:
    Все в томже SDK следующей строкой идет
    comcall pDirectSound, SetCooperativeLevel, [hwnd], DSSCL_PRIORITY
    Что такой comcall и DSSCL_PRIORITY
     
  8. Ursus

    Ursus Member

    Публикаций:
    0
    Регистрация:
    15 мар 2006
    Сообщения:
    238
    Адрес:
    Russia
    Мой тебе совет, полковник. Совет врача. Выучи английский!
     
  9. wcools

    wcools New Member

    Публикаций:
    0
    Регистрация:
    7 сен 2008
    Сообщения:
    89
    Боюсь не успею, софтину нужно до пятници сделать.
     
  10. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    wcools
    добавлю..
    ..и с ДХ если нет понятия ни в ДХ ни в асме, лучше начинать на мсС++ безо всяких промежуточных либ.
    по директХ версии 2 есть полная дока на русском. практически все, что вам надо там описано. электронного варианта прям щас я не имею.

    берете мс дх сдк не самой высокой версии, 3, 5, 7 - вполне подойдут. смотрите в папочку с примерами, выбираете попроще из подходящих и перелицовываете во что вам нужно. иначе до 5тницы - 100% только у доброго тов. сдуть или за n-ную сумму. ну вы поняли
     
  11. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    о, нашел
    http://cs.mipt.ru/docs/comp/rus/programming/os/win32/directx/main.pdf
    4 метра
     
  12. Microedition

    Microedition Active Member

    Публикаций:
    0
    Регистрация:
    5 июн 2008
    Сообщения:
    814
    wcools
    Подождите, подождите, вы используете ассемблер fasm?
    Если да, то comcall - это макрос, который определен в include-файлы %fasmdir%\include\macro\com32.inc
    Он нужен для вызова COM-метода.

    pDiretctSound - переменная-указатель на интерфейс (инициализируется при вызове DirectSoundCreate8).
    SetCooperativeLevel - имя метода интерфейса.
    далее идут параметры для метода.
    hwnd - очевидно, handle главного окна.
    DSSCL_PRIORITY - какой-то флаг. хз. смотрите заголовочный файл и читайте документацию.

    PS. Если вы ничего не поняли, то изучите "технологию COM" на низком уровне,
    п потом пользуйтесь макросами. Здесь на сайте есть статьи про COM/ООП.
     
  13. wcools

    wcools New Member

    Публикаций:
    0
    Регистрация:
    7 сен 2008
    Сообщения:
    89
    Как без макроса это организовать??? FASM еще всевремя на подлючаемые файлы ругается.
     
  14. Microedition

    Microedition Active Member

    Публикаций:
    0
    Регистрация:
    5 июн 2008
    Сообщения:
    814
    А вы скажите мне по какому смещению находится
    указатель на нужный вам метод (напр. SetCooperativeLevel)
    относительно начала интерфейса и я скажу, как это сделать
    без макросов.

    Но в общем виде это выглядит так:
    Код (Text):
    1. mov    eax,dword[pDiretctSound] ;; загружаем указатель на интерфейс.
    2. mov    eax,dword[eax] ;; в EAX - указатель на таблицу виртуальных функций.
    3.  
    4. push   param_n
    5. push   param_1
    6. push   param_0
    7. push   dword[pDiretctSound] ;; первый параметр - тоже, что и в С++ - this
    8. call     dword[eax+func_offset*4] ;; вызываем метод.
    Например, метод Release любого интерфейса можно вызвать так:
    Код (Text):
    1. mov    eax,dword[pInterface] ;; загружаем указатель на интерфейс.
    2. mov    eax,dword[eax] ;; в EAX - указатель на таблицу виртуальных функций.
    3.  
    4. push   dword[pInterface] ;; первый параметр - тоже, что и в С++ - this
    5. call     dword[eax+8*4] ;; вызываем метод.
    А вы добавьте переменную окружения include с путем к папке include
    fasm'a и не будет ругаться.
     
  15. Microedition

    Microedition Active Member

    Публикаций:
    0
    Регистрация:
    5 июн 2008
    Сообщения:
    814
    Ой, ошибка в предыдущем посте.
    не так
    Код (Text):
    1. call     dword[eax+8*4] ;; вызываем метод.
    а так:
    Код (Text):
    1. call     dword[eax+2*4] ;; вызываем метод.
    или так:
    Код (Text):
    1. call     dword[eax+8] ;; вызываем метод.
    По смещению +0 от начала таблицы виртуальных функций любого COM-интерфейса
    находится указатель на метод QueryInterface.
    По смещению +4 - указатель на метод AddRef.
    По смещению +8 - указатель на метод Release.
     
  16. wcools

    wcools New Member

    Публикаций:
    0
    Регистрация:
    7 сен 2008
    Сообщения:
    89
    Помогите с программой. SetCooperativeLevel ниработает ни в какую. inc файлы не могу подключить, fasm всевремя ругается. Вот программа.
     
  17. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    напишите все это на С++. отладьте. когда заработает - переносите. ато вы ни то, ни то не знаете
     
  18. wcools

    wcools New Member

    Публикаций:
    0
    Регистрация:
    7 сен 2008
    Сообщения:
    89
    Надо именно на fasm. Получилось подключить файлы :) . Сейчас ошибка ваще непонятная:
    undefined symbol pDirectSound.handle

    Ошибка эта на строке comcall pDirectSound,SetCooperativeLevel,NULL,DSSCL_NORMAL

    А в подключеном файле на макрасе
    macro comcall object, func, [arg]
    {
    common
    .PARAM_COUNT = 1

    if ~ arg eq
    reverse
    .PARAM_COUNT = .PARAM_COUNT + 1
    push dword arg
    common
    end if

    if defined func#%
    if func#% <> 0
    if .PARAM_COUNT <> func#%
    display 'Param miscount ( ',`object,',',`func, ' )',13,10
    end if
    end if
    end if
    mov eax, [object#.#handle]
    push eax
    mov eax, [eax]
    call [eax + object#.#handle#.#func]
    }

    Мне кажется, что это макрос какойто неправельный???
     
  19. wcools

    wcools New Member

    Публикаций:
    0
    Регистрация:
    7 сен 2008
    Сообщения:
    89
    Помогите пожалуйста. Для меня очень важно написать эту программу. Может кому не лень написать блок возпроизведения?
     
  20. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    вроде по русски написал - возьмите простой С пример из старого СДК. в более поздних С примеров нету
    добейтесь рабочести на С (можно и на ++, но без классов)
    потом уже переводите на асм. с С на асм перевести, надеюсь, сможете?

    структуры и что как вызывается - смотрите в хидерах. в С части.
    и это, не понимаете в макросах - не пользуйтесь ими. понимаете средне и даже неплохо - пользуйтесь слегка и осторожно. меньше потеть на отладке будете