对非托管 DLL 函数的“平台调用”调用(zz)
2005-03-24 02:19
323 查看
平台调用依赖于元数据在运行时查找导出的函数并封送其参数。下图显示了这一过程。
对非托管 DLL 函数的“平台调用”调用
当“平台调用”调用非托管函数时,它将依次执行以下操作:
查找包含该函数的 DLL。
将该 DLL 加载到内存中。
查找函数在内存中的地址并将其参数推到堆栈上,以封送所需的数据。
将控制权转移给非托管函数。
平台调用会向托管调用方引发由非托管函数生成的异常。
示例:
Imports System.Runtime.InteropServices
Public Class Win32
Declare Auto Function MessageBox Lib "user32.dll" _
(ByVal hWnd As Integer, ByVal txt As String, _
ByVal caption As String, ByVal Typ As Integer) As Integer
End Class
Public Class HelloWorld
Public Shared Sub Main()
Win32.MessageBox(0, "Hello World", "Platform Invoke Sample", 0)
End Sub
End Class
http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/cpguide/html/cpconplatforminvokeexamples.asp
下表将说明 Win32 API 中几个常用的 DLL。
对非托管 DLL 函数的“平台调用”调用
当“平台调用”调用非托管函数时,它将依次执行以下操作:
查找包含该函数的 DLL。
将该 DLL 加载到内存中。
查找函数在内存中的地址并将其参数推到堆栈上,以封送所需的数据。
注意[/b] 只在第一次调用函数时,才会查找和加载 DLL 并查找函数在内存中的地址。
将控制权转移给非托管函数。
平台调用会向托管调用方引发由非托管函数生成的异常。
示例:
Imports System.Runtime.InteropServices
Public Class Win32
Declare Auto Function MessageBox Lib "user32.dll" _
(ByVal hWnd As Integer, ByVal txt As String, _
ByVal caption As String, ByVal Typ As Integer) As Integer
End Class
Public Class HelloWorld
Public Shared Sub Main()
Win32.MessageBox(0, "Hello World", "Platform Invoke Sample", 0)
End Sub
End Class
http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/cpguide/html/cpconplatforminvokeexamples.asp
下表将说明 Win32 API 中几个常用的 DLL。
DLL | 内容说明 |
---|---|
GDI32.dll | 用于设备输出的图形设备接口 (GDI) 函数,例如用于绘图和字体管理的函数。 |
Kernel32.dll | 用于内存管理和资源处理的低级别操作系统函数。 |
User32.dll | 用于消息处理、计时器、菜单和通信的 Windows 管理函数。 |
相关文章推荐
- 使用.NE平台调用服务访问非托管 DLL 中的函数
- [原]Bug Report,已提交给微软。平台调用调试时,无法对非托管函数进行单步的错误
- C#与DLL和COM的混合编程(1)-C#调用C++写的非托管的DLL中导出的函数
- C# 调用 C++ dll 函数 时传递字符串 需要注意的问题(zz)
- C#与DLL和COM的混合编程(1)-C#调用C++写的非托管的DLL中导出的函数
- 调用外部 DLL 中的函数(2. 晚绑定)
- C#.NET dll封装(包含UI和实现函数),通过反射调用dll实现控件的快速加载(PrimPointList.cs)
- 在非托管的 VC++2005 中调用托管的 C# DLL 文件
- C#动态调用DLL中的函数
- asp.net 项目中如何调用vb dll 函数
- 调用未知DLL中的导出函数
- python 调用 DLL 的函数,返回的字符串数组的食用方法
- 调用外部 DLL 中的函数(1. 早绑定)
- linux平台学x86汇编(十九):C语言中调用汇编函数
- 在C++中调用DLL中的函数(3)
- DLL导出函数方法以及动态调用
- android平台打印函数调用栈的方法
- Qt调用DLL动态库接口函数程序崩掉
- Windows平台使用Java调用Windows API或dll
- 易语言 DLL 详细解释 (API函数 就相当于调用DLL中的函数)