c++ - DirectX9 CreateDevice 在 C 中失败,但在 C++ 中成功
问题描述
我在 C 中制作了一个 d3d9 应用程序,但是当尝试创建一个设备对象时,它在 C 中失败了,但它在 C++ 中的对应物正常工作并返回 S_OK。
C:
isOk = pD3D->lpVtbl->CreateDevice(pD3D, D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, d3dpParams.hDeviceWindow, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpParams, &lpDevice);
C++:
isOk = pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, d3dpParams.hDeviceWindow, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpParams, &lpDevice);
我的猜测在于 D3DPRESENT_PARAMETERS d3dpParams 在 C++ 中它是用“= {}”初始化的:
D3DPRESENT_PARAMETERS d3dpParams = {};
d3dpParams.Windowed = false;
d3dpParams.SwapEffect = D3DSWAPEFFECT_DISCARD;
...
而在 C 中你只能写“;”:
D3DPRESENT_PARAMETERS d3dpParams;
d3dpParams.Windowed = false;
d3dpParams.SwapEffect = D3DSWAPEFFECT_DISCARD;
...
*pD3D 是由 Direct3DCreate9() 创建的 IDirect3D9*,如果我理解正确,它不会失败。
它最初是用 gcc 完成的,但 msvc 给出了完全相同的结果。
解决方案
普通 C 结构的={}
初始化仅将内存归零。
微软自己的示例在https://docs.microsoft.com/en-us/windows/win32/direct3d9/creating-a-device建议ZeroMemory
这样做:
D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory( &d3dpp, sizeof(d3dpp) );
推荐阅读
- java - JPA、JSF 以及我的实体是否仍应被管理?
- docker - 与多个应用程序的 Docker 端口映射
- python - 如何使用熊猫将大型 json 文件转换为 CSV?
- rabbitmq - RabbitMQ 镜像队列导致节点内存不足
- reactjs - 如何从反应前端客户端应用程序调用solidity后备功能
- python - 从rest api到pyspark数据框的嵌套json
- gradle - 当没有配置存储库时,Gradle 在哪里寻找 buildscript 依赖项?
- python - 列表作为 pandas 函数的参数
- python-3.x - ImportError:动态模块未定义模块导出功能
- python - AttributeError:“系列”对象没有属性“列”