我正在尝试使用nvapi.dll获取我的图形处理器的全名和我的图形处理器使用情况。我在这个网站上遇到了这篇文章:C# Performance Counter Help, Nvidia GPU。
他使用了两个源,一个在dll本身(用于获取用法),全名使用从nevidia网站下载的nvapi的头文件。
有什么方法可以在我的项目中避免这种重复吗?只使用dll或只使用nevidia带来的头文件。感谢所有的帮手
发布于 2020-08-02 17:15:18
您可以在需要时动态加载DLL文件,
在c#中,您可以使用.Net反射(如果dll是在.Net框架中开发的),例如:
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" }); 如果提到的动态链接库不是在.Net框架下开发的,但您被迫使用.Net框架(更多信息请参见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后释放所有资源。
发布于 2020-08-02 19:16:39
我在https://github.com/processhacker/plugins-extra/blob/master/NvGpuPlugin/nvidia.c中找到了函数id的列表
除了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);
https://stackoverflow.com/questions/63214032
复制相似问题