`
ihuashao
  • 浏览: 4663607 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

C#调用API函数示例

阅读更多

通过调用CreateFile和ReadFile等API函数说明此问题,代码参考MSDN:

http://msdn2.microsoft.com/zh-cn/library/2d9wy99d(vs.80).aspx

usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;

namespaceApiTest
...{
classFileReader
...{
constuintGENERIC_READ=0x80000000;
constuintOPEN_EXISTING=3;
System.IntPtrhandle;

[System.Runtime.InteropServices.DllImport(
"kernel32",SetLastError=true)]
staticexternunsafeSystem.IntPtrCreateFile
(
stringFileName,//filename
uintDesiredAccess,//accessmode
uintShareMode,//sharemode
uintSecurityAttributes,//SecurityAttributes
uintCreationDisposition,//howtocreate
uintFlagsAndAttributes,//fileattributes
inthTemplateFile//handletotemplatefile
);

[System.Runtime.InteropServices.DllImport(
"kernel32",SetLastError=true)]
staticexternunsafeboolReadFile
(
System.IntPtrhFile,
//handletofile
void*pBuffer,//databuffer
intNumberOfBytesToRead,//numberofbytestoread
int*pNumberOfBytesRead,//numberofbytesread
intOverlapped//overlappedbuffer
);

[System.Runtime.InteropServices.DllImport(
"kernel32",SetLastError=true)]
staticexternunsafeboolCloseHandle
(
System.IntPtrhObject
//handletoobject
);

publicboolOpen(stringFileName)
...{
//opentheexistingfileforreading
handle=CreateFile
(
FileName,
GENERIC_READ,
0,
0,
OPEN_EXISTING,
0,
0
);

if(handle!=System.IntPtr.Zero)
...{
returntrue;
}

else
...{
returnfalse;
}

}


publicunsafeintRead(byte[]buffer,intindex,intcount)
...{
intn=0;
fixed(byte*p=buffer)
...{
if(!ReadFile(handle,p+index,count,&n,0))
...{
return0;
}

}

returnn;
}


publicboolClose()
...{
returnCloseHandle(handle);
}

}


classProgram
...{
staticintMain(string[]args)
...{
if(args.Length!=1)
...{
System.Console.WriteLine(
"Usage:ReadFile<FileName>");
return1;
}


if(!System.IO.File.Exists(args[0]))
...{
System.Console.WriteLine(
"File"+args[0]+"notfound.");
return1;
}


byte[]buffer=newbyte[128];
FileReaderfr
=newFileReader();

if(fr.Open(args[0]))
...{
//AssumethatanASCIIfileisbeingread.
System.Text.ASCIIEncodingEncoding=newSystem.Text.ASCIIEncoding();

intbytesRead;
do
...{
bytesRead
=fr.Read(buffer,0,buffer.Length);
stringcontent=Encoding.GetString(buffer,0,bytesRead);
System.Console.Write(
"{0}",content);
}

while(bytesRead>0);

fr.Close();
return0;
}

else
...{
System.Console.WriteLine(
"Failedtoopenrequestedfile");
return1;
}


}

}

}

特别要注意的是,由于代码中用到了unsafe代码,因此,编译的时候需要在项目属性中勾选允许编译Unsafe的选项:

否则会报:

Unsafe code may only appear if compiling with /unsafe

的错误。

分享到:
评论

相关推荐

    在C#中调用API函数.

    在本文中,我们将介绍如何在 C# 中调用 API 函数,并提供了一些实际示例代码。 一、什么是 API 函数? API(Application Programming Interface,应用程序编程接口)是一组预定义的函数或方法,用于实现不同应用...

    C#调用API修改系统时间

    本文将深入探讨如何使用C#调用API来修改系统时间,这对于理解和掌握系统级编程概念至关重要。 首先,我们需要理解API(Application Programming Interface)的概念。API是一组预定义的函数、类、对象和接口,它们...

    C#调用Windows API函数

    5. 示例应用:下面是一个简单的示例,展示了如何使用C#调用`MessageBox`函数: ```csharp using System; using System.Runtime.InteropServices; class Program { [DllImport("user32.dll", CharSet = CharSet....

    c#调用wlanapi连接到wifi示例

    总的来说,C#调用WLANAPI连接到WiFi涉及了P/Invoke、系统API调用、错误处理等多个知识点,理解并应用这些概念可以帮助你实现对Windows系统WiFi连接的控制。在实际开发中,确保对每个API函数的使用都有充分的理解,并...

    Javascript调用C#函数示例程序

    一个在HTML中使用Javascript的window.external调用C#内函数的示例程序。该方法可应用于网页程序开发中的网页-程序沟通,例如用C#的IHTMLWindow2.execScript替换HTML默认Javascript方法使其直接与C#传参、通讯。

    在c#中调用api函数操作ini文件

    本篇文章将详细介绍如何使用C#来封装这些API函数,并提供一个简单的示例类,以展示如何使用这些封装好的方法来操作INI文件。 #### 三、INI文件结构 一个典型的INI文件通常包含多个段落(Section),每个段落中又...

    C#运用API函数获取系统信息

    1. **导入必要的命名空间**:在调用API函数前,首先需要导入`System.Runtime.InteropServices`命名空间,这是C#调用API函数的基石,提供了一系列必要的类和方法,如`DllImport`属性,用于指定要调用的DLL文件位置。...

    实现c#调用matlab函数.doc实现c#调用matlab函数.doc

    ### 实现C#调用MATLAB函数的知识点详解 #### 一、背景介绍 随着.NET框架的广泛应用,很多开发者在构建复杂应用时可能会遇到需要利用MATLAB的强大计算能力的情况。MATLAB以其强大的数学处理功能而闻名,特别是在科学...

    C#调用c++函数的dll文件,同时实现c++调用c#函数

    本示例展示了如何在C#和C++之间实现互操作性,即C#调用C++编写的动态链接库(DLL)函数,同时C++也能调用C#的方法。这主要依赖于.NET框架提供的互操作特性,如C++/CLI(C++的.NET版本)和P/Invoke(Platform Invoke...

    C#回调函数示例

    本示例将通过VS2013环境,探讨如何在C#中实现和应用回调函数。 首先,我们需要理解回调函数的基本概念。回调函数本质上是一个在其他函数完成其工作后被调用的函数。在C#中,我们通常使用委托(Delegate)来实现回调...

    c#调用dll示例

    C#调用DLL(动态链接库)的示例就是这样的一个场景,它允许C#代码利用C++编写的底层库,从而结合了C#的易用性和C++的高效性。 在C++中创建DLL文件通常涉及以下步骤: 1. 定义导出函数:在C++源文件中,使用`__...

    C# API函数查询工具

    3. **示例代码**:提供API函数的使用示例,帮助开发者理解如何在C#中正确调用。 4. **API文档链接**:可能直接链接到官方文档或其他权威资源,提供更详细的API信息。 5. **错误处理**:指导开发者如何处理可能出现...

    C#中如何调用API函数进行屏幕捕获的小例子

    总的来说,通过使用C#调用API函数和管理非托管资源,我们可以实现更底层的功能,如屏幕捕获。理解这个过程对于开发涉及系统级操作的应用程序至关重要。在实际项目中,可能还需要考虑错误处理、多线程安全等因素,以...

    C#中调用API,介绍API的使用

    #### 三、C#中调用API示例 在C#中使用API通常涉及结构体、类型转换、安全/不安全代码等概念。下面通过一个简单的例子来展示如何在C#中调用API。 ##### 实现一个简单的MessageBox 1. **创建项目**:在Visual ...

    C# 不调用API函数实现INI读取.docx

    C# 不调用API函数实现INI读取 在本节中,我们将探讨如何在C#中不调用API函数实现INI文件的读取和写入操作。 INI文件是一种常用的配置文件格式,广泛应用于各种软件和系统中。传统上,读取和写入INI文件需要使用...

    在C#中调用windows API函数

    通过以上示例可以看出,在C#中调用Windows API函数可以非常灵活地控制应用程序的行为,并且能够实现许多.NET框架本身不支持的功能。然而,需要注意的是,在使用这些API函数时必须确保对它们的正确性和安全性有足够的...

    C# 联合HALCON编程 之 HALCON引擎在C#内的调用 示例

    首先,为了在C#中调用HALCON引擎,你需要安装HALCON的.NET接口。这个接口提供了C#开发者所需的所有类和方法,以便在代码中直接操作HALCON的核心功能。确保你的HALCON安装包含.NET组件,并且已正确配置。 在C#中使用...

    C#调用API的例子

    总结来说,C#调用API涉及到的关键点有P/Invoke机制、`DllImport`属性、`extern`关键字、结构体布局以及API函数的参数处理。通过这些知识点,开发者可以在C#中轻松地调用各种系统级功能或第三方库的功能。

    C#调用API控禁用键盘鼠标

    ### C#调用API控制禁用键盘鼠标及锁屏功能详解 #### 一、引言 在特定的应用场景下,例如开发系统维护工具或者安全控制软件时,可能需要临时禁用用户的键盘和鼠标输入,或者锁定工作台来防止未经授权的操作。本文将...

Global site tag (gtag.js) - Google Analytics