【发布时间】:2022-01-15 03:13:50
【问题描述】:
我正在尝试使用 Windows XP Professional SP3 虚拟机构建旧应用程序。我用mingw设置了环境,除了构建过程中的这个错误之外一切都很好:
error: 'struct _DDSURFACEDESC2' has no member named 'DUMMYUNIONNAMEN'
似乎来自 mingw 的 ddraw.h 标头具有不同的结构。我试图从源代码中删除 DUMMYUNIONNAMEN,如下所示:
// desc is passed as argument, initialized elsewhere
// desc type --> LPDDSURFACEDESC2
int depth = desc->DUMMYUNIONNAMEN(4).ddpfPixelFormat.DUMMYUNIONNAMEN(1).dwRGBBitCount;
我用这个代替了:
int depth = desc->ddpfPixelFormat.dwRGBBitCount;
以这种方式构建,但是当我运行应用程序时,有时会出现 ACCESS VIOLATION 错误,有时(使用不同的输入文件)没有视频(黑色窗口,只有音频)
【问题讨论】:
-
The
DDSURFACEDESC2structure 没有DUMMYUNIONNAMEN成员。您正在阅读哪些使用DUMMYUNIONNAMEN的书籍、教程或文档? -
至于崩溃的“访问冲突”,您使用 debugger 来捕获它们并定位它们发生的时间和地点,并检查变量及其值以看看能不能给你一个提示。
-
那些
DUMMYUNIONNAMEN的名字不应该被使用。由于 C(直到 C11)不支持匿名联合,因此必须引入它们。客户端代码应该访问联合字段,并忽略联合名称。您的访问冲突是定义一个指针 (LPDDSURFACEDESC2 desc;) 而不初始化它,然后继续使用它,就好像它指向有效内存一样。 -
@Someprogrammerdude: docs.microsoft.com/en-us/windows/win32/api/ddraw/…