主题:C#编程中如何调用API函数
liuyu2
[专家分:110] 发布于 2008-07-23 22:09:00
各位,我们编程时候 往往要用到WINDOWS API函数,我在C#编程如何调用他们呢??
调用这个和C#的其他函数的调用有没有区别。调用它在C#中有没有特别的要求呢??
回复列表 (共2个回复)
沙发
jzyray [专家分:20610] 发布于 2008-07-25 10:05:00
msdn中P/Invoke的示例:
using System;
using System.Runtime.InteropServices;
class PlatformInvokeTest
{
[DllImport("gdi32.dll", CharSet=CharSet.Auto)]
public static extern IntPtr CreateFontIndirect(
[In, MarshalAs(UnmanagedType.LPStruct)]
LOGFONT lplf // 特征
);
[DllImport("gdi32.dll")]
public static extern bool DeleteObject(
IntPtr handle
);
public static void Main()
{
LOGFONT lf = new LOGFONT();
lf.lfHeight = 9;
lf.lfFaceName = "Arial";
IntPtr handle = CreateFontIndirect(lf);
if (IntPtr.Zero == handle)
{
Console.WriteLine("Can't creates a logical font.");
}
else
{
if (IntPtr.Size == 4)
Console.WriteLine("{0:X}", handle.ToInt32());
else
Console.WriteLine("{0:X}", handle.ToInt64());
// 删除所创建的逻辑字体。
if (!DeleteObject(handle))
Console.WriteLine("Can't delete the logical font");
}
}
}
由此可以看出,首先using System.Runtime.InteropServices;
然后通过设置DllImport以及方法的extern版本进行API方法映射
然后就可以像本地函数一样调用这个方法了
板凳
sageking2 [专家分:200] 发布于 2008-07-26 22:49:00
我收藏了两个讲得比较详细的.
http://hi.baidu.com/sageking2/blog/item/9406570f8a5481e8aa64573b.html
http://hi.baidu.com/sageking2/blog/item/136da2da9eca3addb6fd48d5.html
我来回复