【问题标题】:SetPixelFormat returns 0, but no error is set?SetPixelFormat 返回 0,但没有设置错误?
【发布时间】:2013-10-03 04:17:33
【问题描述】:

我在 WINE 中运行 VB6 应用程序,但程序的 OpenGL 部分不起作用。它正在使用 PFD_DRAW_TO_BITMAP。 PFD_DRAW_TO_WINDOW 格式似乎可以工作。

我列举了所有像素格式(大约有 256 种),其中一些符合我的要求。 ChoosePixelFormat 似乎返回了正确的格式(在本例中为 pixelFormat 6),但是当我将此值传递给 SetPixelFormat 时,它返回 0。我查看了文档并说要检查 GetLastError() 以获取更多信息,但是当我调用它时,它返回 0 格式为空白错误消息。

有谁知道为什么 SetPixelFormat 会失败?我做了一些阅读,听起来 DRAW_TO_BITMAP 自 2009 年 5 月以来就已实施。

我知道 DRAW_TO_BITMAP 不是硬件加速的。这是完全可以接受的。此应用程序在 Windows 中运行良好,我只需要弄清楚为什么支持的像素格式似乎无法被识别。

我在他们的包管理器中运行 Ubuntu,最新版本的 WINE,如果这很重要,在 Quadro 上(不确定 Wine 是否尝试使用底层显卡,或者它是否虚拟化所有像素格式以进行软件渲染)

【问题讨论】:

  • 您是否在真实的 Windows 安装中测试过它是否是 Wine 错误?
  • 是的,它适用于我的 Windows 安装。适用于我尝试过的所有安装,除了 3。

标签: opengl vb6 wine


【解决方案1】:

我不知道为什么 SetPixelFormat 只会在 WINE 上失败,但无论如何从 VB6 代码手动调用 GetLastError 是不正确的。 VB 在幕后进行自己的 DLL 调用。这些(通常)会成功,重置 GetLastError 看到的错误代码并使其在 VB 代码中无用。

相反,VB 在每次用户启动的 DLL 调用之后立即调用 GetLastError 本身。它保存该值并使其作为属性Err.LastDllError 可用。用它来找出真正的错误代码。

【讨论】:

    猜你喜欢
    • 2019-11-22
    • 2016-04-13
    • 2015-07-27
    • 2011-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-01
    • 1970-01-01
    相关资源
    最近更新 更多