Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Direct3D类型定义的使用_C++_Pointers_Struct_Directx_Typedef - Fatal编程技术网

C++ Direct3D类型定义的使用

C++ Direct3D类型定义的使用,c++,pointers,struct,directx,typedef,C++,Pointers,Struct,Directx,Typedef,因此,在上面的多重采样结构定义中,使用typedef并重复相同结构名称的真正原因是什么。还有*LPDXGI\u SAMPLE\u DESC为什么是指针?TyPulf指针表示什么?< P>如果你使用C++,TyPulf对你来说没什么关系。在C语言中,您希望使用它来避免编写类似以下内容voidfoo(structs) 如果需要指向此结构的指针,例如在函数参数中。这主要是由于C如何处理结构类型。在C++中,事情有点不同,这就是为什么你不再经常看到这种模式。 请注意,DirectX是一个,因此是用C来指

因此,在上面的多重采样结构定义中,使用typedef并重复相同结构名称的真正原因是什么。还有
*LPDXGI\u SAMPLE\u DESC为什么是指针?TyPulf指针表示什么?

< P>如果你使用C++,TyPulf对你来说没什么关系。在C语言中,您希望使用它来避免编写类似以下内容
voidfoo(structs)


如果需要指向此结构的指针,例如在函数参数中。这主要是由于C如何处理结构类型。在C++中,事情有点不同,这就是为什么你不再经常看到这种模式。 请注意,DirectX是一个,因此是用C来指定的,即使它使用对象和类

第一个提到的
DXGI_SAMPLE_DESC
是标记名,第二个是typedef的名称

省略标记名有一个主要缺点,即它会阻止向前声明类型。还有一些问题与Microsoft的工具链如何为COM接口生成代码有关,为什么您不想跳过标记名

另一方面,省略typedef将迫使您在C代码中使用类型时编写
struct DXGI_SAMPLE_DESC
,而不是普通的
DXGI_SAMPLE_DESC


*LPDXGI_SAMPLE_DESC
是第二个typedef,它引用指向
DXGI_SAMPLE_DESC
的指针,而不是普通结构类型本身。这在C++中仍然是相同的。< /P>所以,为结构定义一个指针,我只需要写:LPDXGIGSAMPADYDESCC PrTr.MSDESC;因此,ptr_msDESC将是结构声明的ptr?@lighthouse正确。这里名称的LP前缀实际上是微软风格的匈牙利指针符号(LP=长指针,但区分长指针和近指针)。哦,好的,这样就清除了LP。窗户里到处都是。保持原样阅读,但现在我理解了上下文。谢谢当一切都是长ptr时,为什么他们不反对旧的符号?@灯塔历史原因。当从16位移动到32位时,他们不想中断现有代码,现在他们可能永远都在使用它。Windows API充满了这样的历史怪癖,而这一个肯定是其中一个更无害的怪癖。啊,好的。当我第一次看到LPCTSR的时候,我很傻。。。但是一旦你能读到它,它是无害的。似乎最后只是一个符号问题。谢谢你的清理,伙计!
typedef struct DXGI_SAMPLE_DESC {
         UINT Count;
         UINT Quality;
} DXGI_SAMPLE_DESC, *LPDXGI_SAMPLE_DESC;