C# &引用;使用;vs[DllImport]?

C# &引用;使用;vs[DllImport]?,c#,pinvoke,dllimport,using,C#,Pinvoke,Dllimport,Using,我想知道什么是最顶级的声明引用,为什么我们仍然需要使用DllImport?我说的是C#。当您需要调用非托管代码时,会使用它 例如,您可能需要调用windows API函数,因此可以执行如下声明: [DllImport("Advapi32.dll", EntryPoint="GetUserName", ExactSpelling=false, SetLastError=true)] static extern bool GetUserName( [MarshalAs(UnmanagedType.L

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

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

例如,您可能需要调用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 );
参考资料:
DllImport用于导入包含在DLL中的函数,该DLL不受.NET管理。using语句允许您的代码轻松引用其他.NET程序集,而无需使用完全限定名。

Visual Studio为您创建基本引用(例如系统)

您不需要DllImport,除非您想从以下位置使用本机库:

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


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

指令
using
包含引用的托管程序集的命名空间。

dlliport
用于从非托管的DLLs导入方法。

dlliport用于将本机dll库导入托管的(.net)应用程序。例如,C++语言库可以导入并用于C语言项目。


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

使用不会导入任何内容,可执行文件不会变大,只是源代码文件对任何引用的程序集中声明的内容具有可见性。我的用词选择不当。我修改了它。谢谢已经有一段时间想写这个博客了:和: