“Using”与[DllImport]的区别?

10

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


一直想写这篇博客:http://tergiver.wordpress.com/2011/03/11/understanding-the-using-directive/ - Tergiver
与此相同:https://dev59.com/vHA75IYBdhLWcg3wYYBQ#36920388 - slayernoah
6个回答

13
根据MDSN文档所述:DllImport属性在将现有的非托管代码重用于托管应用程序时非常有用。例如,您的托管应用程序可能需要调用非托管的WIN32 API。
基本上,当您编写.NET应用程序且库没有托管包装器(它是用非托管代码编写的)时,您需要使用DllImport来进行互操作。否则,您可以像通常一样使用using语句引用托管库作为任何基类库。

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 );

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


3

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


3

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

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


1

DllImport 用于导入一个不受 .NET 管理的 DLL 中包含的函数。而 using 语句则是为了让你的代码可以轻松引用其他 .NET 组件,而无需使用完全限定名称。


使用“using”不会导入任何东西,可执行文件也不会变大,只是源代码文件对任何已引用程序集中声明的内容具有可见性。 - Davide Piras
我的措辞不太恰当,我已经修改了。谢谢! - Frank Hale

1

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接