广州市民办教育协会:请详细说出。NET调用WIN32API的方法(举DIRECTX)的例子。

来源:百度文库 编辑:杭州交通信息网 时间:2024/05/06 00:44:57

给个例子吧^_^
http://www.moon-soft.com/doc/44954.htm
http://hqtech.nease.net/Article/DS_DXHistory.htm

给你看另一个例子吧,调用的不是directX,不过原理都一样。

下面是示例在C#里面调用win32api中的 CreateFile 和 CloseHandle 这两个函数。

using System;
using System.IO;
using System.Runtime.InteropServices;

namespace copytest
{
/// <summary>
/// FileAccess 的摘要说明。
/// </summary>
public class OpenFileApi
{

private const uint GENERIC_READ = 0x80000000;
private const uint GENERIC_WRITE = 0x40000000;

private const int CREATE_NEW = 1;
private const int CREATE_ALWAYS = 2;
private const int OPEN_EXISTING = 3;
private const int OPEN_ALWAYS = 4;

private const int FILE_SHARE_READ = 0x1;
private const int FILE_SHARE_WRITE = 0x2;

private const uint FILE_ATTRIBUTE_READONLY = 0x1;
private const uint FILE_ATTRIBUTE_HIDDEN = 0x2;
private const uint FILE_ATTRIBUTE_SYSTEM = 0x4;
private const uint FILE_ATTRIBUTE_DIRECTORY = 0x10;
private const uint FILE_ATTRIBUTE_ARCHIVE = 0x20;
private const uint FILE_ATTRIBUTE_NORMAL = 0x80;
private const uint FILE_ATTRIBUTE_TEMPORARY = 0x100;
private const uint FILE_ATTRIBUTE_COMPRESSED = 0x800;
private const uint FILE_FLAG_NO_BUFFERING = 0x20000000;
private const uint FILE_FLAG_WRITE_THROUGH = 0x80000000;

private const int INVALID_HANDLE_VALUE = -1;

private int filehandle;

//声明API的语句。(关键!)
[DllImport("kernel32.dll")]
private static extern int CreateFile
(
string lpFileName, //File name
uint dwDesiredAccess, //Access mode
int dwShareMode, //Share mode
int lpSecurityAttributes, //SD
int dwCreationDisposition, //How to create
uint dwFlagsAndAttributes, //File attributes
int hTemplateFile //Handle to template file
);

[DllImport("kernel32.dll")]
private static extern bool CloseHandle
(
int hObject //Handle to object
);

public OpenFileApi()
{
filehandle=INVALID_HANDLE_VALUE;
nobuffermode=false;
}

~OpenFileApi()
{
Close();
}

public FileStream Open(String filepath,FileMode mode, FileAccess access,FileShare share)
{
uint dwDesiredAccess; //Access mode
int dwShareMode; //Share mode
int lpSecurityAttributes; //SD
int dwCreationDisposition; //How to create
uint dwFlagsAndAttributes; //File attributes

if (filehandle != INVALID_HANDLE_VALUE)
{
CloseHandle(filehandle);
}

switch (access)
{
case FileAccess.Read:
dwDesiredAccess=GENERIC_READ;
break;
case FileAccess.Write:
dwDesiredAccess=GENERIC_WRITE;
break;
default:
dwDesiredAccess=GENERIC_READ | GENERIC_WRITE;
break;
}

switch (share)
{
case FileShare.Read:
dwShareMode=FILE_SHARE_READ;
break;
case FileShare.Write:
dwShareMode=FILE_SHARE_WRITE;
break;
case FileShare.ReadWrite:
dwShareMode=FILE_SHARE_READ | FILE_SHARE_WRITE;
break;
default:
dwShareMode=0;
break;
}

switch (mode)
{
case FileMode.Open:
dwCreationDisposition=OPEN_EXISTING;
break;
case FileMode.OpenOrCreate:
dwCreationDisposition=OPEN_ALWAYS;
break;
case FileMode.CreateNew:
dwCreationDisposition=CREATE_NEW;
break;
default:
dwCreationDisposition=CREATE_ALWAYS;
break;
}

lpSecurityAttributes=0;

dwFlagsAndAttributes=FILE_ATTRIBUTE_NORMAL;

filehandle=CreateFile(filepath,
dwDesiredAccess,
dwShareMode,
lpSecurityAttributes,
dwCreationDisposition,
dwFlagsAndAttributes,
0);

if (filehandle != INVALID_HANDLE_VALUE)
{
FileStream newfs = new FileStream((IntPtr)filehandle,access);
return(newfs);
}
else
{
throw new Exception("File cannot open.");
//return(null);
}
}

public void Close()
{
if (filehandle!=INVALID_HANDLE_VALUE)
{
CloseHandle(filehandle);
filehandle=INVALID_HANDLE_VALUE;
}
}

}
}