1 DLLImport 的使用
using System;
using System.Runtime.InteropServices; //命名空间
class Example
{
//用 DllImport 导入 Win32 的 MessageBox 函数
[DllImport("user32.dll", CharSet = CharSet.Unicode)]
public static extern int MessageBox(IntPtr hWnd, String text, String caption, uint
type);
//方法被声明为 static。这是 P/Invoke 方法所要求的,因为在该 Windows API 中没有//
一致的实例概念。接下来,还要注意该方法被标记为 extern。这是提示编译器该方法是通//过
一个从 DLL 导出的函数实现的,因此不需要提供方法体。
static void Main()
{
// Call the MessageBox function using platform invoke.
MessageBox(new IntPtr(0), "Hello World!", "Hello Dialog", 0);
}
}
使用非托管 DLL 函数并不困难,下面我们可以详细的了解上面的代码的含义。首先介绍什么是
托管代码,什么是非托管代码。然后再详细介绍 DLLImport 的使用方法和各字段的意义。
2 托管代码 (managed code)
.NET Framework 的核心是其运行库的执行环境,称为公共语言运行库(CLR)或.NET 运行库。
通常将在 CLR 的控制下运行的代码称为托管代码(managed code)。
运行库环境(而不是直接由操作系统)执行的代码。托管代码应用程序可以获得公共语言运行库
服务,例如自动垃圾回收、运行库类型检查和安全支持等。这些服务帮助提供独立于平台和语言
的、统一的托管代码应用程序行为。
托管代码是可以使用 20 多种支持 Microsoft .NET Framework 的高级语言编写的代码,
它们包括:C#, J#, Microsoft Visual Basic .NET, Microsoft JScript .NET, 以及 C++。所
有的语言共享统一的类库集合,并能被编码成为中间语言(IL)。运行库编译器(runtime-aware
ompiler)在托管执行环境下编译中间语言(IL)使之成为本地可执行的代码,并使用数组边界
和索引检查,异常处理,垃圾回收等手段确保类型的安全。
在托管执行环境中使用托管代码及其编译,可以避免许多典型的导致安全黑洞和不稳定程序
的编程错误。同样,许多不可靠的设计也自动的被增强了安全 性,例如类型安全检查,内存管
理和释放无效对象。程序员可以花更多的精力关注程序的应用逻辑设计并可以减少代码的编写量。
这就意味着更短的开发时间和更健 壮的程序。
简单点说,托管代码是 microsoft 的中间语言,他主要的作用是在.NET FRAMEWORK 的 CLR
执行代码前去编译源代码,也就是说托管代码充当着翻译的作用,源代码在运行时分为两个阶段:
1.源代码编译为托管代码;(所以源代码可以有很多种,如 VB,C#,J#)
2.托管代码编译为 microsoft 系统的.net 平台专用文件(如类库、可执行文件等)。
2.1 非托管代码 (unmanaged code)
评论0