【问题标题】:Windows API and .net languagesWindows API 和 .net 语言
【发布时间】:2009-02-07 20:20:46
【问题描述】:

人们总是建议我,如果我正在做一些应该使用某些 Windows API 来完成任何进程级工作的应用程序,我必须使用 VC++ 而不是任何其他 .net 语言。

这有什么道理吗?

所有可以使用 VC++ 完成的事情也可以用其他 .net 语言完成吗?

比较所有 .net 语言的功能是否相同?

【问题讨论】:

    标签: c# .net vb.net winapi visual-c++


    【解决方案1】:

    如果您需要非常密切地使用本机代码,C++ 可能会让生活变得更轻松。但是,使用 P/Invoke 从 C#、VB.NET、F# 等调用 Win32 API 本身并没有错。

    虽然 C# 和 VB.NET 在功能上很大程度上是相同的,但并非所有 .NET 语言的功能都相同。我知道 C++/CLI 公开了一些 C# 或 VB.NET 没有公开的东西——我不知道反过来是否正确。 (我不知道 C++/CLI 对于 lambda 表达式、扩展方法等是什么样的。)

    【讨论】:

    • C++/CLI 不支持 lambda 表达式或扩展方法。
    • 这是我的猜测,但我不想在不确定的情况下提出指控:)
    • F# 在功能上几乎等同于 C#。
    • @Rayne:在什么方面?显然它在类型推断等方面更有能力。你的意思是它暴露了哪些 CLR 概念?
    【解决方案2】:

    对于大多数类库不提供帮助的任务,使用 P/Invoke 通常没问题。有许多“粗略”的 API 受益于简单的 C++/CLI 包装器。通常最好在 C++/CLI 代码中做最少的事情——有效地按摩下面的丑陋内容以供 C#、VB.NET 等使用。

    【讨论】:

      【解决方案3】:

      当我开始在 .Net 中编程时,我使用的是 C++/CLI,因为我来自最小的 Win32 C++ 背景。我发现我很头疼,因为我不了解 C++/CLI 和 Win32 C++ 之间的细微差别和界限。它不像它们看起来那样容易在两者之间进行互操作。当我了解 P/Invoke 并让我的生活变得更轻松时,我终于开始提高我的技能。 P/Invoke 很好,你不一定需要 C++/CLI 来做到这一点。在我看来,您要么完全将 Win32 C++ 用于低级别的东西,要么将 .Net 用于高级的东西,我真的不建议您尝试将 Win32 C++ 与 C++/CLI 进行互操作,除非您绝对必须这样做。即便如此,使用您需要的内容制作 Win32 DLL 并从 .Net 中 P/Invoke DLL 可能更容易,反之亦然。永远记得为工作选择正确的工具。

      【讨论】:

        猜你喜欢
        • 2011-10-16
        • 2010-10-05
        • 2010-11-23
        • 2016-02-09
        • 1970-01-01
        • 2010-10-08
        • 1970-01-01
        • 1970-01-01
        • 2010-09-07
        相关资源
        最近更新 更多