【发布时间】:2011-03-11 13:11:28
【问题描述】:
我想知道声明最多的引用是什么,为什么我们仍然需要使用 DllImport?我说的是 C#。
【问题讨论】:
标签: c# pinvoke dllimport using
我想知道声明最多的引用是什么,为什么我们仍然需要使用 DllImport?我说的是 C#。
【问题讨论】:
标签: c# pinvoke dllimport using
在托管应用程序中重用现有非托管代码时,DllImport 属性非常有用。例如,您的托管应用程序可能需要调用非托管 WIN32 API。
基本上,当您编写 .NET 应用程序时,如果库没有托管包装器(它是用非托管代码编写的),您需要使用 DllImport 与它进行互操作。否则,您可以使用 using 语句引用托管库,就像通常引用任何基类库一样。
【讨论】:
当你需要调用非托管代码时使用它。
例如,您可能需要调用 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/
【讨论】:
using 指令包括来自引用的托管程序集的命名空间。DllImport 用于从 非托管 DLL 导入方法。
【讨论】:
DLLImport 用于将本机 dll 库导入托管 (.net) 应用程序。例如,可以在您的 c# 项目中导入并使用用 C++ 编写的库。
Using 用于引用位于托管引用的 dll 之一中的命名空间。这些通常是 .net 程序集。
【讨论】:
Visual Studio 为您创建基本参考(例如系统)。
除非你想使用原生库,否则不需要 DllImport
【讨论】:
DllImport 用于导入包含在不受 .NET 管理的 DLL 中的函数。 using 语句用于允许您的代码轻松引用其他 .NET 程序集,而无需使用完全限定名称。
【讨论】: