C#中的API声明格式比较特别,建议你找个像API Viewer的东东。
可以在http://www.c-sharpcorner.com/找到。
如果你能给出EMAIL地址的话,我可以给你发一个过去。
可以在http://www.c-sharpcorner.com/找到。
如果你能给出EMAIL地址的话,我可以给你发一个过去。
解决方案 »
- 关于for(int i='a'; int i<'z';i--)[菜鸟]
- GDI+ 中发生一般性错误??????
- "DataReceive"的重载均与委托“......”不匹配
- 一个很弱智的问题:关于用New创建类实例,尽管弱智,不懂还是得问.
- 做个应用程序,现在如何在关闭窗口的时候不真正关闭,让小图标显示在左面右下角,就像QQ一样的
- 显示数据问题!
- 将类生成控件使用?不太明白,哪位来帮忙看看
- 谁能告诉我 愚翁 博客的地址!!
- 急等给分 datagrid属性取得
- 请问足球彩票的复式选号的算法怎么写?
- 有那位高手听说过Dr scheme?这是一个编辑器,是一种语言制造器,能产生自己的语言...请告诉我详情
- 随机获取窗体控件的 name 属性值,到底怎么设置???
[email protected]
LayoutKind.Automatic——为了提高效率允许运行态对类型成员重新排序。 注意:永远不要使用这个选项来调用不受管辖的动态链接库函数。
LayoutKind.Explicit——对每个域按照FieldOffset属性对类型成员排序
LayoutKind.Sequential——对出现在受管辖类型定义地方的不受管辖内存中的类型成员进行排序。
StructLayout后是对结构的重新定义,但只是对原结构成员的类型的重新定义(要符合标准)。
对每个结构的重新定义都需StructLayout。
当API函数返回句柄时用IntPtr。如HDC就要用IntPtr。
②先使用using System.InteropServices。先声明API函数后使用。
格式:[DllImport(库名,EntryPoint=函数名,CharSet=CharSet.Unicode,ExactSpelling=ture)]
public static extern 类型 函数名(参数);
其中CharSet表示采用的是Unicode或ANSI版本,ExactSpelling=false表示让编译器决定使用哪个版本。在public语句中可对函数改名。如:[DllImport(:”User32.dll”)];
以类作参数和以结构作参数是一样的。
③回调函数的传递:⑴创建delegate类型的回调函数,如:public delegate bool CallBack();
⑵创建回调函数的实例,将实例作参数用在API函数中。如:CallBack e=new CallBack()
④指针类型参数传递:将指针类型转化为数组类型。
一个例子:using System.Runtime.InteropServices; [StructLayout(LayoutKind.Sequential)] public struct Point { public int x; public int y; }
[DllImport("User32.dll")] public static extern Bool PtInRect(ref Rect r, Point p);
[email protected]
using System; class callAPICls { [sysimport(dll="user32.dll")] public static extern int MessageBoxA(int h, string m, string c, int type); public static int Main() { return MessageBoxA(0, "Hello World!", "Caption", 0); } }