C#中的API是不是Win32API?

请详细点那JAVA中的API呢?... 请详细点
那JAVA中的API呢?
展开
 我来答
ansenyou
推荐于2016-06-14 · TA获得超过2.4万个赞
知道大有可为答主
回答量:1.1万
采纳率:8%
帮助的人:7907万
展开全部
C#中的API就是Win32API,即平台调用(P/Invoke),一种调用非托管的DLL中函数的.net特性。
Windows API 是作为 Windows 操作系统一部分的动态链接库 (DLL)。当难以自己编写等效的过程时,可以使用它们来执行任务。在代码中使用 Windows API 的好处在于它们可以节省开发时间,因为它们包含许多已经编写好的、等待使用的有用函数。缺点是在发生故障时,Windows API 可能难以处理并且不可挽回。
Windows API 表示一种特殊类别的互操作性。Windows API 不使用托管代码,不具备内置类型库,它使用的数据类型与 Visual Studio 中所用的数据类型不同。由于这些差别,且 Windows API 不是 COM 对象,所以与 Windows API 和 .NET Framework 的互操作是通过使用平台调用 (PInvoke) 来完成的。平台调用是一种服务,它使托管代码能够调用 DLL 中实现的非托管函数。
为了从托管代码中调用非托管的DLL中函数,你要创建一个P/Invoke包装(Wrapper)。一个P/Invoke包装是一个.net兼容的方法声明,用来创建P/Invoke包装的语法与创建托管方法的声明语法本质上是一样的。唯一不同是P/Invoke包装不包含函数体,而只有方法名、返回值类型和参数信息。并且,P/Invoke包装使用了DllImport属性。这个属性是用来定位包含有目标函数的非托管的DLL。
例如:
MessageBox在win32的头文件中的声明:
int WINAPI MessageBoxA(HWnd,LPCWSTR lpText,LPCWSTR lpCaption,UINT uType);
那么我们要在C#中调用这个MessageBox时要这样声明:
using System.Runtime.InteropServices;
public class Win32 {
[DllImport("user32.dll")]
public static extern int MessageBox(int hWnd, String text,
String caption, uint type);
}
然后可以用常规的.net方法去调用这个MessageBox:
public class HelloWorld {
public static void Main() {
Win32.MessageBox(0, "Hello World", "Platform Invoke Sample", 0);
}
}
百度网友caef6e2bb
2008-01-26 · TA获得超过2425个赞
知道小有建树答主
回答量:1174
采纳率:0%
帮助的人:1391万
展开全部
是的,正确
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式