Direct3D typedef 用法

Direct3D typedef usage

typedef struct DXGI_SAMPLE_DESC {
         UINT Count;
         UINT Quality;
} DXGI_SAMPLE_DESC, *LPDXGI_SAMPLE_DESC;

那么在上面的多重采样结构定义中,使用typedef并重复相同结构名称的真正原因是什么。另外*LPDXGI_SAMPLE_DESC; 为什么是指针? typedef 指针表示什么?

如果您使用 C++,则此 typedef 对您来说无关紧要。在 C 中,你希望它避免写这样的东西 void foo(struct S s);

需要指针才能允许使用 LPDXGI_SAMPLE_DESC 你需要指向这个结构的指针,例如在函数参数中。

这主要是由于 C 处理结构类型的方式。在 C++ 中工作方式略有不同,这就是为什么您不再经常看到这种模式的原因。

请注意,DirectX 是 COM-API,因此是根据 C 指定的,即使它使用对象和 类。

第一个提到的DXGI_SAMPLE_DESC是标签名,第二个是typedef的名字。

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

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

*LPDXGI_SAMPLE_DESC 是第二个 typedef,它引用 指向 DXGI_SAMPLE_DESC 的指针,而不是普通结构类型本身。这是 standard typedef syntax,在 C++ 中仍然相同。