Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法从C#.NET加载Win32本机DLL文件_C#_Winapi_Dll - Fatal编程技术网

无法从C#.NET加载Win32本机DLL文件

无法从C#.NET加载Win32本机DLL文件,c#,winapi,dll,C#,Winapi,Dll,我有一个C#winapp。我调用C语言应用程序中的一个本地的.dll文件(用C++创建),它工作得很好。 但是,当我将应用程序(.exe和.dll文件)复制到另一台计算机时,会出现一个错误,显示: 无法加载DLL“c:\dllname.DLL”:找不到指定的模块。(来自HRESULT的异常:0x8007007E) 以下是C#代码: 我该怎么办?尽量不要在指定文件名的DllImport属性参数中硬编码任何路径。然后,您应该使usre文件除了可执行文件之外,还正确 大概是这样的: [DllImpor

我有一个C#winapp。我调用C语言应用程序中的一个本地的.dll文件(用C++创建),它工作得很好。 但是,当我将应用程序(.exe和.dll文件)复制到另一台计算机时,会出现一个错误,显示:

无法加载DLL“c:\dllname.DLL”:找不到指定的模块。(来自HRESULT的异常:0x8007007E)

以下是C#代码:


我该怎么办?

尽量不要在指定文件名的
DllImport
属性参数中硬编码任何路径。然后,您应该使usre文件除了可执行文件之外,还正确

大概是这样的:

[DllImport("user32.dll", CharSet = CharSet.Unicode)]

将DLL移动到根目录。如果这样做有效,请查看您的属性以确定原因。您尚未发布任何代码,因此我无法给出任何具体原因。

部署具有本机依赖项的.Net应用程序时的一个常见问题是,本机DLL本身可能在目标计算机上缺少依赖项,例如正确版本的C运行时


使用此类工具来分析您的本机dll,并确定它是否对您复制的机器缺少依赖项。

@user434186请注意,您应该对有帮助的答案进行投票,并接受解决您的问题的答案。未找到的文件指向此作为答案@用户434186请按照@chibacity所说的去做,投票选出好的答案,并接受前面问题的最佳答案。这是.dll依赖项。my dll使用默认情况下不在windows\system32文件夹中的MSVCR100.dll中的某些函数。我复制了这个错误的dll,它工作得很好。谢谢。@user434186太好了-现在你应该投票支持我的答案并接受它我复制了C#.exe文件旁边的.dll。甚至复制到'C:\\'路径并解决了它,但问题仍然存在!我复制了C#.exe文件旁边的.dll。甚至复制到'C:\\'路径并解决了它,但问题仍然存在!请用C代码发布您的
声明。我编辑了这篇文章,还编写了C\dll导入代码。我注意到您的代码仍然在C:\目录中硬编码dll的路径。正如其他答案所暗示的那样,没有理由这样做。应用程序将自动加载与其可执行文件位于同一目录中的DLL。您所需要的只是文件名。问题不在于路径和文件名。它是.dll依赖项。my dll使用默认情况下不在windows\system32文件夹中的MSVCR100.dll中的某些函数。我复制了一个mising dll,它运行得很好。是的,chibacity已经把这当作你的问题(你应该接受他的答案,顺便说一下,点击左边空白处的复选标记)。我只是补充说,在应用程序的源代码中硬编码DLL的路径被认为不是一种好的做法。最好的地方是应用程序的目录,如果省略了路径规范,它将首先检查目录。很高兴看到你解决了你的问题。
[DllImport("user32.dll", CharSet = CharSet.Unicode)]