COM and DirectSound
COM and DirectSound
我正在尝试通过以下方式初始化直接声音:
// 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)))
{
问题是我收到此错误(?
onecorecomcombaseobjactobjact.cxx(812)combase.dll!75521B90: (caller: 7552093B) ReturnHr(1) tid(2444) 800401F0 CoInitialize has not been called.
谁能说出这与什么有关?在使用 DirectSound 时,我是否需要调用 CoInitialize,或者我可以绕过 COM 的东西吗?
以下是我的链接器选项:
set CommonLinkerFlags= -incremental:no -nodefaultlib -stack:0x100000,0x100000 ^
kernel32.lib ^
user32.lib ^
gdi32.lib ^
winmm.lib
没有COM就无法使用Direct Sound,因为它是基于COM的。您DirectSoundCreate
进行的第一个调用会创建一个对象实现IDirectSound
COM 接口的实例。文档提到在某些情况下不需要显式 COM 初始化。但为了安全起见,无论如何手动执行它是一个好主意。 在处理COM内容时,CoInitialize
是强制性的。通常,这应该是在创建窗口/渲染之前在应用程序初始化时要做的第一件事。并且不要忘记在使用完 COM 后致电CoUninitialize
。
相关文章:
- C++核心准则 C35 对于接口类"A base class destructor should be either public and virtual, or protected and nonv
- 为什么C++逐位AND运算符在不同大小的操作数中表现为这样
- 为什么 Clang 不允许"and"作为函数名称?
- 位阵列上的快速AND运算
- 是否可以在 C++03 中定义'move-and-swap idiom'等效项
- BoostPython and CMake
- OpenSSL BIO and SSL_read
- Gurobi GRBModel and GRBmodel in C++
- std::visit and std::variant usage
- SHBrowseForFolder with BIF_BROWSEFORCOMPUTER and SHGetPathFr
- Directx12 and keystrokes
- different between int **arr =new int [ n]; and int a[i][j]?
- C++ getenv and setenv
- Inference pytorch C++ with alexnet and cv::imread image
- Visual Studio 2019 C++ and std::filesystem
- 保证逻辑 AND 表达式中的函数调用
- python ctypes and C++ pointers
- C++ const char with .begin() and .end()
- Threads with Classes and std::packaged_task
- COM and DirectSound