я использую 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
неправильно что ли?
Спасибо!
Это не задокументировано непосредственно на странице документации NVAPI для этой функции, но вам нужно установить версию на вашем malloc’е displayIds
структура, прежде чем передать его в NvAPI_GPU_GetAllDisplayIds
, Добавьте эту строку перед звонком:
displayIds->version = NV_GPU_DISPLAYIDS_VER;
Это кажется довольно стандартным во всей NVAPI с другими вызовами функций.
Других решений пока нет …