admin 管理员组

文章数量: 1184232


2024年3月20日发(作者:share花体英文)

请问C#高手:[DllImport()]是什么意思??

展开全文

请问C#高手: [DllImport("")]是什么意思??

这叫引入这个动态连接库。

这个动态连接库里面包含了很多WindowsAPI函数,如果你想使用

这面的函数,就需要这么引入。举个例子:

[DllImport("")]

private static extern void 函数名(参数,[参数]);

函数名就是一个属于里的一个函数。完了你就可以

用那个函数了。

调用这个DLL里面的API接口!

系统API

例如

[DllImport("")]//--引入API

public

调用该方法是和调用普通方法没区别

DLL Import 属性

现在是更深入地进行探讨的时候了。在对托管代码进行 P/Invoke

调用时,DllImportAttribute 类型扮演着重要的角色。

DllImportAttribute 的主要作用是给 CLR 指示哪个 DLL 导出您想要调

用的函数。相关 DLL 的名称被作为一个构造函数参数传递给

DllImportAttribute。

如果您无法肯定哪个 DLL 定义了您要使用的 Windows API 函数,

static extern ReturnType FunctionName(type

arg1,type arg2,...);//--声明方法

Platform SDK 文档将为您提供最好的帮助资源。在 Windows API 函

数主题文字临近结尾的位置,SDK 文档指定了 C 应用程序要使用该函

数必须链接的 .lib 文件。在几乎所有的情况下,该 .lib 文件具有与定

义该函数的系统 DLL 文件相同的名称。例如,如果该函数需要 C 应用

程序链接到 ,则该函数就定义在 中。您可

以在 MessageBeep 中找到有关 MessageBeep 的 Platform SDK 文

档主题。在该主题结尾处,您会注意到它指出库文件是 ;

这表明 MessageBeep 是从 中导出的。

可选的 DllImportAttribute 属性

除了指出宿主 DLL 外,DllImportAttribute 还包含了一些可选属

性,其中四个特别有趣:EntryPoint、CharSet、SetLastError 和

CallingConvention。

EntryPoint 在不希望外部托管方法具有与 DLL 导出相同的名称的

情况下,可以设置该属性来指示导出的 DLL 函数的入口点名称。当您

定义两个调用相同非托管函数的外部方法时,这特别有用。另外,在

Windows 中还可以通过它们的序号值绑定到导出的 DLL 函数。如果

您需要这样做,则诸如“#1”或“#129”的 EntryPoint 值指示 DLL

中非托管函数的序号值而不是函数名。

CharSet 对于字符集,并非所有版本的 Windows 都是同样创建

的。Windows 9x 系列产品缺少重要的 Unicode 支持,而 Windows

NT 和 Windows CE 系列则一开始就使用 Unicode。在这些操作系统

上运行的 CLR 将Unicode 用于 String 和 Char 数据的内部表示。但

也不必担心 — 当调用 Windows 9x API 函数时,CLR 会自动进行必

要的转换,将其从 Unicode转换为 ANSI。

如果 DLL 函数不以任何方式处理文本,则可以忽略


本文标签: 函数 托管 方法