首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >COM和DirectSound

COM和DirectSound
EN

Stack Overflow用户
提问于 2018-01-20 16:48:48
回答 1查看 420关注 0票数 0

我正在尝试通过以下方式初始化Direct Sound:

代码语言:javascript
复制
// 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)))
    {

问题是我得到了这个错误(?)

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

有没有人能说出这与什么有关?在使用DirectSound时,我需要调用CoInitialize吗?或者我可以绕过COM组件吗?

以下是我的链接器选项:

代码语言:javascript
复制
set CommonLinkerFlags= -incremental:no -nodefaultlib -stack:0x100000,0x100000 ^
kernel32.lib ^
user32.lib ^
gdi32.lib ^
winmm.lib
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-20 17:08:09

没有COM就无法使用Direct Sound,因为它是基于COM的。第一次调用DirectSoundCreate时,它会创建一个实现IDirectSound COM接口的对象实例。文档中提到了that explicit COM initialization is not required in some situations。但为了安全起见,最好还是手动执行它。在处理COM内容时,CoInitialize是必需的。通常,在创建窗口/渲染之前,这应该是应用程序初始化时要做的第一件事。使用完COM后,不要忘了调用CoUninitialize

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48354197

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档