无法将 User32.dll 导入 Visual Studio

Posted

技术标签:

【中文标题】无法将 User32.dll 导入 Visual Studio【英文标题】:Can't import User32.dll into Visual Studio 【发布时间】:2013-07-28 13:16:43 【问题描述】:

我试过了:

要从 Reference Manager 添加 user32.dll,并从 Windows\System32\user32.dll 导入它,我得到了 错误信息

无法添加对“C:\Windows\System32\user32.dll”的引用。 请确保该文件是可访问的,并且它是一个有效的程序集或 COM 组件。

using System.Runtime.InteropServices; [DllImport("user32")]

以管理员身份启动 Visual Studio

没有任何效果...这让我很紧张我正在尝试 2 个小时来导入这个该死的 .dll...

【问题讨论】:

您添加该 DLL 的实际目标是什么?您提到了DllImport,它显然不需要添加本机 DLL 作为参考... @RohitVats:这个问题涉及 .NET 或 COM DLL,而不是像 user32.dll 这样的普通 Win32 DLL。 【参考方案1】:

您不需要添加对 User32.dll 的引用。它是 Windows 的一部分,可以在您的代码中导入而无需添加引用。您可以使用 P/Invoke 执行此操作。

[System.Runtime.InteropServices.DllImport("user32.dll")]
public static extern void SetWindowText(int hWnd, String text);

private void button3_Click(object sender, EventArgs e)

    IntPtr wHnd = this.Handle;//assuming you are in a C# form application
    SetWindowText(wHnd.ToInt32(), "New Window Title");

另见:

Using P/Invoke from MSDN Calling API Functions

【讨论】:

谢谢!我没有意识到/不知道应该定义该方法( public static extern void SetWindowText(int hWnd, String text); ) 嗯,需要定义的不是那种纯粹的方法。您从 user32.dll 引用的每个方法都必须以该格式存在:[System.Runtime.InteropServices.DllImport("user32.dll")] public static extern void <METHODNAME>(<PARAMS>);【参考方案2】:

它不是 .NET dll。您不会像使用 .NET dll 那样“添加引用”。相反,您必须将 P/Invoke 代码添加到您的应用程序以调用您想要的功能。这是学习 pinvoke 的好资源:http://pinvoke.net/

【讨论】:

以上是关于无法将 User32.dll 导入 Visual Studio的主要内容,如果未能解决你的问题,请参考以下文章

[DllImport("user32.dll")]这句代码是啥意思啊?没学过,解释下…

Visual C++ - 覆盖从 DLL 导入的函数?

是否有从 USER32.DLL 导入所有内容的 C# 即用型类? [关闭]

如何将 C/C++ dll 导入 .NET 应用程序

关于vb2005中用到的arp函数findwindow无法在user32.dll中找不到findwindowA接口

visual studio 2008如何引用dll