【问题标题】:"Using" vs [DllImport]?“使用”与 [DllImport]?
【发布时间】:2011-03-11 13:11:28
【问题描述】:

我想知道声明最多的引用是什么,为什么我们仍然需要使用 DllImport?我说的是 C#。

【问题讨论】:

标签: c# pinvoke dllimport using


【解决方案1】:

来自MDSN documentation

在托管应用程序中重用现有非托管代码时,DllImport 属性非常有用。例如,您的托管应用程序可能需要调用非托管 WIN32 API。

基本上,当您编写 .NET 应用程序时,如果库没有托管包装器(它是用非托管代码编写的),您需要使用 DllImport 与它进行互操作。否则,您可以使用 using 语句引用托管库,就像通常引用任何基类库一样。

【讨论】:

    【解决方案2】:

    当你需要调用非托管代码时使用它。

    例如,您可能需要调用 Windows API 函数,因此您可以声明如下内容:

    [DllImport("Advapi32.dll", EntryPoint="GetUserName", ExactSpelling=false,
    SetLastError=true)]
    static extern bool GetUserName(
    [MarshalAs(UnmanagedType.LPArray)] byte[] lpBuffer,
    [MarshalAs(UnmanagedType.LPArray)] Int32[] nSize );
    

    参考: http://www.csharphelp.com/2006/01/call-unmanaged-code-part-1-simple-dllimport/

    【讨论】:

      【解决方案3】:

      using 指令包括来自引用的托管程序集的命名空间。
      DllImport 用于从 非托管 DLL 导入方法。

      【讨论】:

        【解决方案4】:

        DLLImport 用于将本机 dll 库导入托管 (.net) 应用程序。例如,可以在您的 c# 项目中导入并使用用 C++ 编写的库。

        Using 用于引用位于托管引用的 dll 之一中的命名空间。这些通常是 .net 程序集。

        【讨论】:

          【解决方案5】:

          Visual Studio 为您创建基本参考(例如系统)。

          除非你想使用原生库,否则不需要 DllImport

          【讨论】:

            【解决方案6】:

            DllImport 用于导入包含在不受 .NET 管理的 DLL 中的函数。 using 语句用于允许您的代码轻松引用其他 .NET 程序集,而无需使用完全限定名称。

            【讨论】:

            • 使用不会导入任何东西,可执行文件不会变大,只是源代码文件对任何引用程序集中声明的内容具有可见性。
            • 我选词不当。我修改了它。谢谢!
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-02-19
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-10-30
            相关资源
            最近更新 更多