【问题标题】:Are there C# versions available of common DLLImport declarations?是否有可用的 C# 版本的常见 DLLImport 声明?
【发布时间】:2011-07-18 21:50:26
【问题描述】:

有许多 Win32 API 调用/库,如 kernel32 或 shell32,可能对从 C# 调用有用。使用它们的一种常见方法是在pinvoke.net 网站上查找方法定义,并从那里使用 dllimport 定义。

您希望使用的每种方法都需要此过程。

是否有包含常见/大多数[DllImport]ed API 函数的程序集?

我正在寻找可以直接从 C# 中使用的东西(作为参考),因此我不必自己收集和组合各种 DLLImport 语句(存在错误风险)。

【问题讨论】:

  • 好吧,我还没有听说过任何开源 Windows API。
  • @BoltClock 如果是的话,无论如何你都不会在那里找到太多 c# 代码。

标签: c# pinvoke dllimport kernel32


【解决方案1】:

据我所知,没有广为人知的打包 Windows API for .NET 的代码包;我可以看到它在某些情况下很有用,但是,在大多数情况下,如果您需要使用如此多的本机 Windows API,那么您可能应该问自己是否正确使用了 .NET 框架和/或为什么完全使用 .NET?

无论上述意见如何,您都可以在http://pinvoke.net/ 找到相当全面的定义来源。

【讨论】:

  • 他已经知道 pinvoke.net,所以如果你要建议回到它,请解释他如何使用它来找到他正在寻找的东西。
【解决方案2】:

这不是它的工作方式,您只需在 C# 代码中提供 [DllImport] 声明。就像您在 pinvoke.net 或 P/Invoke Interop Assistant 之类的工具上找到它们的方式一样。了解如何实际使用 API 函数需要学习 C 或 C++ 代码。并且大致了解 Windows API 的工作原理。

Petzold 的开创性著作“Programming Windows”是入门的最佳途径。您可以在 Windows SDK 文档中找到 C/C++ 源代码示例,以及完整版 SDK 中包含的许多示例。当然还有网络,只需搜索函数名称即可。具有讽刺意味的是,如今您在网络上找到的以托管语言编写的示例数量开始超过 C/C++ 示例。当心 VB6 声明(Declare 关键字),也广泛使用,其类型与 .NET 不兼容。

像 codeplex.com 和 codeproject.com 这样的网站是查找库的好地方,这些库包含围绕本机 API 调用的托管类包装器。您通常只需使用该库即可。

最后但同样重要的是,stackoverflow.com 是一个极好的资源;)

【讨论】:

    【解决方案3】:

    你应该找到here at pinvoke.net你正在寻找的东西。实际上,没有什么比简单的 DLL 导入子句更能在 C# 源代码中提供的“幕后”了。

    【讨论】:

    • @BoltClock 去学习递归 B-)(开玩笑)。进一步澄清了我的答案。
    • 是的,我拿走了我的 -1。我有点跳枪了:)
    • 实际上我将“pinvoke.net”读作“P/Invoke in .NET”之类的东西:-)
    • 呵呵,是啊,域名里的双关真的很巧妙。
    猜你喜欢
    • 2011-04-15
    • 2010-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多