COM и DirectSound

Я пытаюсь инициализировать Direct Sound следующим образом:

// Somewhere in my header...
#define DIRECT_SOUND_CREATE(name) HRESULT WINAPI name(LPCGUID pcGuidDevice, LPDIRECTSOUND *ppDS, LPUNKNOWN pUnkOuter)
typedef DIRECT_SOUND_CREATE(direct_sound_create);

// Initialization code...
HMODULE DSoundLib = LoadLibraryA("dsound.dll");
if(DSoundLib)
{
direct_sound_create *DirectSoundCreate = (direct_sound_create*)
GetProcAddress(DSoundLib, "DirectSoundCreate");

LPDIRECTSOUND DirectSound;
if(DirectSoundCreate && SUCCEEDED(DirectSoundCreate(0, &DirectSound,0)))
{

Проблема в том, что я получаю эту ошибку (?)

onecore\com\combase\objact\objact.cxx(812)\combase.dll!75521B90: (caller: 7552093B) ReturnHr(1) tid(2444) 800401F0 CoInitialize has not been called.

Кто-нибудь может сказать, с чем это связано? Нужно ли вызывать CoInitialize при использовании DirectSound или я могу обойти COM-вещи?

Вот мои варианты компоновщика:

set CommonLinkerFlags= -incremental:no -nodefaultlib -stack:0x100000,0x100000 ^
kernel32.lib ^
user32.lib ^
gdi32.lib ^
winmm.lib

0

Решение

Невозможно использовать Direct Sound без COM, потому что он основан на COM. Самый первый звонок DirectSoundCreateсоздает экземпляр объекта, реализующего IDirectSound COM интерфейс. Документация упоминает что явная инициализация COM не требуется в некоторых ситуациях. Но это хорошая идея, чтобы вручную выполнить это в любом случае, чтобы быть на безопасной стороне. CoInitialize является обязательным при работе с COM. Как правило, это должно быть одной из первых вещей, которые нужно сделать при инициализации приложения, перед созданием окон / рендеров. И не забудьте позвонить CoUninitialize когда вы закончите работать с COM.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector