NvAPI_GPU_GetAllDisplayIds函数无法按预期工作



我在C++中使用 NVAPI 来修改程序中的 NVIDIA 显示设置。

我无法成功使用NvAPI_GPU_GetAllDisplayIds功能。调用它返回的状态为 NVAPI_INCOMPATIBLE_STRUCT_VERSION

这是我的代码:

int main() {
    NvAPI_Status status;
    NvPhysicalGpuHandle nvGPUHandle[64];
    NvU32 gpuCount;
    status = NvAPI_EnumPhysicalGPUs(nvGPUHandle, &gpuCount);
    if (NVAPI_OK != status) {
        cerr << "Failed to run function: NvAPI_EnumPhysicalGPUsnStatus: " << status << endl;
        return 1;
    }
    if (gpuCount <= 0) {
        cerr << "No GPU's found" << endl;
        return 1;
    }
    for (unsigned i = 0; i < gpuCount; ++i) {
        const NvPhysicalGpuHandle& hPhysicalGpu = nvGPUHandle[i];
        NvU32 displayIdCount = 0;
        status = NvAPI_GPU_GetAllDisplayIds(hPhysicalGpu, nullptr, &displayIdCount);
        if (NVAPI_OK != status) {
            cerr << "Failed to run function: NvAPI_GPU_GetAllDisplayIdsnStatus: " << status << endl;
            return 1;
        }
        if (displayIdCount <= 0) {
            cerr << "No display's found" << endl;
            return 1;
        }
        NV_GPU_DISPLAYIDS* displayIds = static_cast<NV_GPU_DISPLAYIDS*>(malloc(sizeof(NV_GPU_DISPLAYIDS) * displayIdCount));
        status = NvAPI_GPU_GetAllDisplayIds(hPhysicalGpu, displayIds, &displayIdCount);
        if (NVAPI_OK != status) {
            // status is NVAPI_INCOMPATIBLE_STRUCT_VERSION (-9)
            cerr << "Failed to run function: NvAPI_GPU_GetAllDisplayIdsnStatus: " << status << endl;
            return 1;
        }
    }
    return 0;
}

我是否使用不正确malloc或其他什么?谢谢!

这没有直接记录在该函数的 NVAPI 文档页面中,但您需要在将 malloc'ed displayIds 结构上设置版本,然后再将其传递给 NvAPI_GPU_GetAllDisplayIds 。在呼叫之前添加此行:

displayIds->version = NV_GPU_DISPLAYIDS_VER;

这似乎是整个NVAPI中非常标准的,还有其他函数调用。

相关内容

  • 没有找到相关文章

最新更新