C#的互操作性
来源:互联网 发布:淘宝店铺图库 编辑:程序博客网 时间:2024/06/06 13:18
使用windows的API或DLL都是互操作性类别。
Windows API 调用属于称为平台调用(或 PInvoke)的互操作性类别。
平台调用大部分类都可以在System.Runtime.InteropServices命名空间找到。在win32文档中显示系统时间的是C函数:
void GetSystemTime(LPSYSTEMTIME lpSystemTime);
参数是指向structure的指针,这个structure的定义是:
typedef struct _SYSTEMTIME
{
WORD wYear;
WORD wMonth;
WORD wDayOfWeek;
WORD wDay;
WORD wHour;
WORD wMinute;
WORD wSecond;
WORD wMilliseconds;
} SYSTEMTIME, *PSYSTEMTIME;
C#语法定义如下:
[StructLayout(LayoutKind.Sequential)] //这一行是类型的信息,和被编译的代码一起存储的元数据
class SystemTime
{
public ushort wYear;
public ushort wMonth;
public ushort wDayOfWeek;
public ushort wDay;
public ushort wHour;
public ushort wMinute;
public ushort wSecond;
public ushort wMilliseconds;
}
StructLayoutAttribute是System.Runtime.InteropServices中的类,可以控制类或结构中字段在内存中的布局,和枚举类型LayoutKind配合使用
LayoutKind.Sequential --按照结构中占用空间最大的成员进行对齐
LayoutKind.Explicit--成员精确位置被显式控制
LayoutKind.Auto--运行库自动为成员选择适当的布局
也要给要调用的win32函数一个声明:
[DllImport("kernel32.dll")]
static extern void GetSystemTime(SystemTime st);
extern关键字的意思是该函数在程序之外,kernel32.dll是该函数所在的动态链接库。
如果把SystemTime定义成structure,则这样写:
static extern void GetSystemTime(out SystemTime st);
out的意思是传给函数的是一个引用,但是无须先初始化这个对象
- C#的互操作性
- C#平台互操作性
- C#互操作性
- C#与C++的互操作性(interoperate)
- 6.8 代理的互操作性
- C# 互操作性入门系列(一):C#中互操作性介绍
- 25 C# 第二十章 平台互操作性和不安全的代码
- Java与其他语言的互操作性
- Java与其他语言的互操作性
- 语言互操作性的真正含义
- IPv4和IPv6的互操作性
- opencv不同版本之间的互操作性
- IPv4与IPv6的互操作性
- 学习 OpenGL 和 OpenCL 的互操作性
- IPv4和IPv6的互操作性
- ASP.NET语言的互操作性
- 与非托管代码的互操作性
- IPv4 和 IPv6的互操作性
- MVC设计模式在asp.net用户登陆中设计和运用
- 利用COM组件对web数据增,删,改的实现
- 揭开国美电器黄光裕的盖子
- ActiveMQ笔记
- 哄女儿的游戏,快乐拼图
- C#的互操作性
- JAVA集合类(笔记)
- 怎样理解雷达的相参与非相参
- 04/22/09
- NetCMS修改之四:扩展轮换幻灯片属性(NorFilt),具有导读显示
- Java中的修饰符
- Sap ,Oracle, Ax 的比较文档
- Extjs 带验证码的登陆窗口,java版
- SQL2005CLR函数扩展-正则表达式