我爱Aspx >> C#.Net >> 用Visual C#调用Windows API函数下面是一个用MsgBox替换MessageBox名字的例子:
[C#]
using System.Runtime.InteropServices;
public class Win32 {
[DllImport("user32.dll", EntryPoint="MessageBox")]
public static extern int MsgBox(int hWnd, String text, String caption, uint type);
}
许多受管辖的动态链接库函数期望你能够传递一个复杂的参数类型给函数,譬如一个用户定义的结构类型成员或者受管辖代码定义的一个类成员,这时你必须提供额外的信息格式化这个类型,以保持参数原有的布局和对齐。
C#提供了一个StructLayoutAttribute类,通过它你可以定义自己的格式化类型,在受管辖代码中,格式化类型是一个用StructLayoutAttribute说明的结构或类成员,通过它能够保证其内部成员预期的布局信息。布局的选项共有三种:
布局选项描述
LayoutKind.Automatic
为了提高效率允许运行态对类型成员重新排序。
注意:永远不要使用这个选项来调用不受管辖的动态链接库函数。
LayoutKind.Explicit
对每个域按照FieldOffset属性对类型成员排序
LayoutKind.Sequential
对出现在受管辖类型定义地方的不受管辖内存中的类型成员进行排序。
传递结构成员下面的例子说明如何在受管辖代码中定义一个点和矩形类型,并作为一个参数传递给User32.dll库中的PtInRect函数,
函数的不受管辖原型声明如下:
BOOL PtInRect(const RECT *lprc, POINT pt);
注意你必须通过引用传递Rect结构参数,因为函数需要一个Rect的结构指针。
[C#]
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential)]
public struct Point {
public int x;
public int y;
}
[StructLayout(LayoutKind.Explicit]
public struct Rect {
[FieldOffset(0)] public int left;
[FieldOffset(4)] public int top;
[FieldOffset(8)] public int right;
[FieldOffset(12)] public int bottom;
}
class Win32API {
Ҷƪл˵?
编写C#程序实现动态系统托盘图标[05-07]
用C#实现电脑+数据线+手机模式发..[05-07]
C#语言中的重要知识详细介绍与解..[05-07]
完全解读C#.NET中的正则表达式[05-07]
实例学C#.net下轻松制作不规则窗..[05-07]
C#:消息队列应用程序[05-05]
用C#创建Web应用程序[05-05]
用C#创建Web应用程序[05-05]
源码推荐:一个使用C#绘制图形引..[05-05]
在C#里如何调用标准DLL函数[05-05]
编写C#程序实现动态系统托盘图标[05-07]
用C#实现电脑+数据线+手机模式发..[05-07]
C#语言中的重要知识详细介绍与解..[05-07]
完全解读C#.NET中的正则表达式[05-07]
实例学C#.net下轻松制作不规则窗..[05-07]
火影忍者第232话(隐居婆婆的决意..[05-06]
了解WEB页面工具语言XML(六)展望[05-06]
了解WEB页面工具语言XML(五)好处[05-06]
了解WEB页面工具语言XML(四)应用..[05-06]
了解WEB页面工具语言XML(三)支持..[05-06]