在使用copy来尝试复制该dll则出现以下提示(仍需要解决)
使用参考的软件,则正常访问,copy。
首先项目平台要一致(百度到的代码 Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles),需要区分32位与64位)
再进一步缩减代码,做一个小demo(问题简单化)就知道代码究竟错在哪里
应该是nvml引用了其他的dll,你拷贝的时候并没有一起拷贝过去。所以不建议拷贝,直接在原来的位置上面调用。
下面是dependency walker简单查看dll内部情况,而且还是我拷贝到桌面,少调用一些找不到dll的额情况了
这个容易,
你的程序提示“无法在 DLL“XXX.dll”中找到名为“XXX函数”的入口点”这个错误,你可以考虑考虑看看你的dll有木有这个函数
你C盘那个路径下有这个dll吗,没有吧
试一下项目那里右键“管理NUGet程序包”,然后搜索nvml下载,点击安装,然后在项目根目录下的package文件夹里找到nvml.dll复制到输出目录
可能需要注册一下dll regsvr32
比较可能是DLL文件和执行程序的32位/64位问题。
如果本目录没有nvml.dll,则不需要system32下面的nvml.dll。也不需要在代码里面自己拷贝。放好需要的dll就行。你目前的情况应该是缺少dll而在代码里面copy,而copy中又发生缺少文件的情况导致的。
1、先将nvml.dll从C盘复制到你的项目中的一个lib文件夹。
2、引用这个dll.
3、通过这个方法加载dll
/// <summary>
/// 获取服务类&方法
/// </summary>
/// <param name="serviceName"></param>
/// <returns></returns>
private object GetService(string serviceName)
{
object res = null;
switch (serviceName)
{
case "SecurityService":
res = new SecurityService();
break;
default:
Type type = System.Reflection.Assembly.Load("Bingosoft.Metro.Mobile").GetType("Bingosoft.Metro.Mobile." + serviceName);
if (type != null)
res = type.Assembly.CreateInstance(type.FullName);
else
res = null;
break;
}
return res;
}