C++ 为什么我的COM对象不断重置它';s值多少?

C++ 为什么我的COM对象不断重置它';s值多少?,c++,direct3d11,C++,Direct3d11,我最近开始学习Direct3D 11 graphics,能够创建一个能够渲染3D图形的简单界面,并且我尝试在课堂上组织它,但一个问题已经让我头疼。 我已经创建了ID3D11设备,并使用D3D11CreateDeviceAndSwapChain函数对其进行了初始化,但发生的是,在我初始化该设备的函数结束后,该设备返回到一个nullptr值,因此当我在代码的其他部分需要它时,它的值不再初始化(在设备上下文中也会发生这种情况)。我已经尝试了我所能想到的一切,使它成为静态的,在全局空间中声明,在它被重置

我最近开始学习Direct3D 11 graphics,能够创建一个能够渲染3D图形的简单界面,并且我尝试在课堂上组织它,但一个问题已经让我头疼。 我已经创建了ID3D11设备,并使用D3D11CreateDeviceAndSwapChain函数对其进行了初始化,但发生的是,在我初始化该设备的函数结束后,该设备返回到一个nullptr值,因此当我在代码的其他部分需要它时,它的值不再初始化(在设备上下文中也会发生这种情况)。我已经尝试了我所能想到的一切,使它成为静态的,在全局空间中声明,在它被重置之前通过引用传递它的值,声明在同一个函数中使用它的其他函数,甚至将它们设置为内联的,但是没有任何效果。我真的不知道为什么它会丢失分配给它的值,希望有人能帮我解决这个问题。以下是出现问题的部分代码:

//Code goes here...
hr = D3D11CreateDeviceAndSwapChain(NULL, D3D_DRIVER_TYPE_HARDWARE, NULL, D3D11_CREATE_DEVICE_DEBUG, NULL, NULL, D3D11_SDK_VERSION, &scd, &pSwapChain, &pDevice, NULL, &pDeviceContext);
// Function goes fine, now pDevice is a valid COM object until the end of the function.
//Code goes here...
//End of the function.
LoadShaders()
pDevice->CreateVertexShader(code here); //Impossible to create vertex shader because pDevice is nullptr again.

我的程序正在正常初始化Direct3D 11,我已经对它进行了测试,唯一的问题是我的对象丢失了数据(显然)。

问题是ID3D11Device在名为“D3D”的类的函数中被赋值,我试图在名为“Shaders”的类的函数中使用它。Jerry Jeremiah在评论中给出提示后,我使用了调试器并注意到变量具有不同的类值,当我将所有函数放在同一个类中时,问题就解决了。

是否通过引用将pDevice传递到函数中,通过值将其传递到函数中,还是返回它?@JerryJeremiah它当前在全局空间中声明,函数可以访问它,D3D11CreateDeviceAndSwapChain似乎将其作为指针接收,因此该值应在函数结束后继续,我不知道为什么它不是。如果它是全局的,并且它正在被更改,那么你在其他地方有一个bug,它正在腐蚀随机的内存位。如果您的调试器支持,请设置一个内存断点,以便在内存发生变化时停止程序。谢谢您的帮助,我已经解决了问题,如果有人遇到同样的问题,我将在这里回答。顺便说一句,您可能需要阅读