Получение полного имени и использования графического процессора с помощью nvapi - PullRequest
0 голосов
/ 02 августа 2020

Я пытаюсь получить полное имя своего графического процессора и мое использование графического процессора с помощью nvapi.dll. Я встречал этот пост на этом веб-сайте: C# Справка счетчика производительности, Nvidia GPU .

он использует 2 источника, один в самой dll (для использования) и для полного name он использует заголовочный файл nvapi, загруженный с веб-сайта nevidia.

Есть ли способ избежать этого дублирования в моем проекте? используя только dll или используя только файлы заголовков, принесенные nevidia. Спасибо всем помощникам

Ответы [ 2 ]

1 голос
/ 02 августа 2020

вы можете динамически загружать DLL-файл, когда вам это нужно,

в c# вы можете использовать Net Отражение (если dll разработана в. Net framework), например:

var DLL = Assembly.LoadFile(@"path\to\your.dll");

Type t = DLL.GetType("myAssembly.ClassName");
CustomType result = t.InvokeMember("methodName", BindingFlags.InvokeMethod, null, t, new object[] { @"method argument" }); 

если упомянутая dll не разработана под. Net framework, но вы вынуждены использовать. Net framework (для получения дополнительной информации см. this ):

int hModule = LoadLibrary(@"path\to\your.dll");
if (hModule == 0) return false;
IntPtr intPtr = GetProcAddress(hModule, "yourmethod_PTR");

если вы хотите использовать в c / c ++, вы можете использовать следующий код:

HINSTANCE hGetProcIDDLL = LoadLibrary("path\\to\\your.dll");

if (hGetProcIDDLL == NULL) {
   std::cout << "dll not found" << std::endl;
} 

int a = function_to_call("arguments");

ПРИМЕЧАНИЕ: если вы хотите загрузить dll из неизвестного источника, я рекомендую использовать c / c ++, потому что в c / c ++ вы можете проще управлять своей памятью и освободить все ресурсы после загрузки dll,

0 голосов
/ 02 августа 2020

Я нашел список id функций в https://github.com/processhacker/plugins-extra/blob/master/NvGpuPlugin/nvidia.c

В дополнение к http://eliang.blogspot.com/2011/05/getting-nvidia-gpu-usage-in-c.html

я объявил typedef int(*nvAPI_GPU_getFullName_t)(int *handle , char* name); nvAPI_GPU_getFullName_t nvAPI_GPU_getFullName=NULL; nvAPI_GPU_getFullName=(nvAPI_GPU_getFullName_t)(*NvAPI_QueryInterface)(0xCEEE8e9FUL);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...