“使用”vs [DllImport]?

时间:2011-03-11 13:11:28

标签: c# pinvoke dllimport using

我想知道什么是最顶级声明的引用以及为什么我们仍然需要使用DllImport?我在说C#。

6 个答案:

答案 0 :(得分:10)

来自MDSN documentation

  

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

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

答案 1 :(得分:5)

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

例如,您可能需要调用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/

答案 2 :(得分:2)

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

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

答案 3 :(得分:1)

DllImport用于导入不由.NET管理的DLL中包含的函数。 using语句用于允许代码在不使用完全限定名的情况下轻松引用其他.NET程序集。

答案 4 :(得分:1)

Visual Studio为您创建基本引用(例如System)。

除非您想使用本机库,否则不需要DllImport

答案 5 :(得分:1)

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