有没有更轻松的方法从C#调用Win32?

有没有更轻松的方法从C#调用Win32?,c#,interop,dllimport,C#,Interop,Dllimport,每隔几个月我就会发现自己需要从C#调用Win32。虽然我已经做了十几次了,但我通常都忘记了确切的阴谋,所以我会浏览网页或旧代码,找出我需要的DllImport语句,等等 我一个人吗 是否有一个被认可的“Win32”类具有整个Win32 API所需的声明?看来应该有。也许我遗漏了一些东西。没有认可的Win32类,但它是这些东西的一个很好的中心资源。您可能会发现它很有用 此外,对于常见的Win32函数,您可以尝试。这听起来是一个开源项目的好主意 /em戴上思考帽,运行到pinvoke.net查看:您

每隔几个月我就会发现自己需要从C#调用Win32。虽然我已经做了十几次了,但我通常都忘记了确切的阴谋,所以我会浏览网页或旧代码,找出我需要的DllImport语句,等等

我一个人吗


是否有一个被认可的“Win32”类具有整个Win32 API所需的声明?看来应该有。也许我遗漏了一些东西。

没有认可的Win32类,但它是这些东西的一个很好的中心资源。

您可能会发现它很有用


此外,对于常见的Win32函数,您可以尝试。

这听起来是一个开源项目的好主意


/em戴上思考帽,运行到pinvoke.net查看:

您可以使用并搜索Win32Native。它有一系列的定义可用于PInvoking。

获得正确的DllImport语句很容易,就像大家说的那样,但是为了方便使用,我通常将所需的Win32函数包装在C类中,并编译到我的核心助手程序集中。所以下一次我只引用程序集。所以,如果我需要一些Win32函数,很可能它已经在我的助手库中了,如果不是的话,我就添加它


此外,我还将返回代码映射到异常,即如果HResult不为零,我会抛出一个异常,这样我的C#应用程序就永远不需要知道HResult或返回代码。

肯定不是唯一一个+1pinvoke.net很好,但是引用一个程序集就太好了……我绝对不想要一个编译过的程序集。Win32 API非常庞大。我是说真的很大。拖拽数千个API声明只是为了得到您想要的声明,这将是一件非常麻烦的事情。最好将声明作为源代码,并复制所需的声明。是否拖动?将调用组织到枚举、结构和类中的单个引用程序集将非常有用。特别是如果有记录的话。但是,我想每个人都有自己的。对我来说,我会参加集会。我同意有这样的机会会很好。我只能假设微软想阻止人们——特别是那些可能不了解所有后果的人——跨越互操作边界。PInvoke Interop Assistant还可以用于将C代码直接转换为适当的签名和函数。