微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

有一个完整的user32.dll包装库可用于.NET?

我现在通过VB.NET做了很多互操作到user32.dll。 由于user32.dll不在.NET级别,而是在本地级别,所以我需要使用Declare语句声明函数。 虽然这很好,但是我一直在不停地宣布。

我是谷歌search,但唯一有用的网站我碰到的是pinvoke.net 。 虽然它确实包含了一定程度的信息,但是在其文档中有相当多的function或者没有描述或者有很多“Todo”部分。

因此,我想知道是否有可用于.NET的user32.dll的完整包装。 我一直没有find任何恐惧,但也许我看起来不正确。

如何保护一个窗口.net应用程序中的静态string?

.Net和Hadoop – 知道/学习什么和可用的?

在IIS 7.5 / Windows 7家庭高级版RavendB错误

从WPF窗口应用程序中使用具有集成身份validation的WebService

如何testing主机名称是否指本地机器

有没有正确的方法来检查一台机器上是否安装了特定的Microsoft应用程序?

如何在c#.net windows应用程序中检查gridview的行是否被选中

如何在C#中停止进程,知道它的文件名?

监视文件/目录访问在C#

AsyncIO.ForceDotNet.Force()导致Windows XP上的内存泄漏

用于.NET Framework的完整的user32.dll包装将是毫无意义的。 user32.dll导出的绝大多数函数都具有由.NET Framework本地实现的相应函数。 实际上,整个.NET Framework只是一个包含Windows API的包装,包括user32.dll。

我建议您不要尝试从user32.dll的P / Invoke函数,当有方法通过托管代码使用.NET Framework提供的功能来完成时。 在尝试重新发明自己的车轮之前,请先选择MSDN或您首选的方便的.NET参考指南。

如果当你确定你需要的特定函数没有本地等价的话,那么只有这样你才会考虑P /调用Windows API。 在这种情况下,由于您已经大幅缩小了必须导入的函数数量,所以使用MSDN文档, pinvoke.net和Stack Overflow的组合来确定函数签名的工作量应该很小。 我想说自己编写这个代码的好处(现在你已经把你需要的东西缩减到了一个更易于管理的大小),那就是你实际上需要阅读文档并且明白它是如何工作的。 如果您依赖别人编写的代码,那么不能保证它的写入是正确的,它遵循最佳实践,实现任何错误处理,甚至不了解它是如何工作的以及如何使用它。

最后,我建议即使在VB.NET中,您也可以使用标准的C#语法来创建P / Invoking函数,而不是Declare 。 例如:

<DllImport("user32.dll",CharSet:=CharSet.Auto,SetLastError:=True)> _ Private Shared Function AppendMenu(ByVal hMenu As IntPtr,ByVal uFlags As MenuFlags,ByVal uIDNewItem As Int32,ByVal lpNewItem As String) As Boolean End Function

有几个原因,我认为这是最好的:

Declare语法是为了维持向后兼容VB 6的方式。 官方的.NET方式(通常在C#中使用)使用<DllImport>属性,而且由于您正在编写针对.NET Framework的全新代码,因此应该强烈考虑使用官方语法。 这里的另一个好处是,使用C#的人会更熟悉你的代码,并且他们能够更好地帮助你处理你的声明。 您在网上找到的示例最有可能以这种方式编写,而不是使用传统的VB 6样式语法。

有时, Declare语法有一些意想不到的行为。 例如,某些类型的编组方式与标准的<DllImport>语法不同。 对于更熟悉标准.NET行为的人来说,这可能会令人困惑。

也看到这个问题处理类似的问题。

有几个自动的P / Invoke签名生成器可以帮助你。

我实际上只是使用预先构建的封装,称为托管Windows API 。 它没有任何东西,但它有很多东西。 当与PInvoke.net Visual Studio插件一起使用时,应该有一个相当自动的方式来处理这个问题。

我希望以下的网址会帮助你。

http://mwinapi.sourceforge.net/

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐