Функция NvAPI_GPU_GetAllDisplayIds не работает должным образом

я использую NVAPI в C ++, чтобы изменить настройки отображения 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_EnumPhysicalGPUs\nStatus: " << 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_GetAllDisplayIds\nStatus: " << 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_GetAllDisplayIds\nStatus: " << status << endl;
return 1;
}
}

return 0;
}

Я использую malloc неправильно что ли?
Спасибо!

0

Решение

Это не задокументировано непосредственно на странице документации NVAPI для этой функции, но вам нужно установить версию на вашем malloc’е displayIds структура, прежде чем передать его в NvAPI_GPU_GetAllDisplayIds, Добавьте эту строку перед звонком:

displayIds->version = NV_GPU_DISPLAYIDS_VER;

Это кажется довольно стандартным во всей NVAPI с другими вызовами функций.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]