随笔分类 - .net互操作(P/Invoke)
摘要:API与C#数据结构类型对应关系表 API与C#的数据类型对应关系表 API数据类型类型描述C#类型API数据类型类型描述C#类型WORD16位无符号整数ushortCHAR字符charLONG32位无符号整数intDWORDLONG64位长整数longDWORD32位无符号整数uintHDC设备描述表句柄intHANDLE句柄,32位整数intHGDIOBJGDI对象句柄intUINT32位无符号整数uintHINSTANCE实例句柄intBOOL32位布尔型整数boolHWM窗口句柄intLPSTR指向字符的32位指针stringHPARAM32位消息参数intLPCSTR指向常字符的32
阅读全文
摘要:有了前两篇后,我们在这里面建立一个测试项目。简单的设备管理器:)界面如下图:源码项目下载地址:http://download.csdn.net/source/352079。
阅读全文
摘要:通过上一篇“通过API实现C#对硬件的控制(一)” 我们掌握了我们所需要的相关API知识点。为此,我们现在来构建我们自己的外部调用类:Externs。由于有上一篇的详细说明,该处不再一一说明相关的函数知识点。下面是该类的代码:using System;using System.Collections.Generic;using System.Text;using System.Runtime.InteropServices;namespace Hardware...{ /**//// summary /// 下列所需函数可参考MSDN中与驱动程序相关的API函数 /// /summary
阅读全文
摘要:最近在做项目的过程中,涉及到对硬件启用及禁用的功能(在指定时间段内才能启用硬件)。因为C#自身对硬件的操作基本为零,为此,搜索了一下MSDN中与设备相关的API函数。还果然就有。下面一一列举出各函数的原型及相关的说明文档。并将其转为C#代码实现。函数一: RegisterDeviceNotification功能:注册设备或者设备类型,在指定的窗口返回相关的信息原型:HDEVNOTIFY WINAPI RegisterDeviceNotification( __in HANDLE hRecipient, __in LPVOID NotificationFilter, __in DWORD Fla
阅读全文
摘要:.net 框架程序可以通过静态 DLL 入口点的方式来访问本机代码库。DllImport 属性用于指定包含外部方法的实现的dll 位置。 DllImport 属性定义如下: namespace System.Runtime.InteropServices { [AttributeUsage(AttributeTargets.Method)] public class DllImportAttribute: System.Attribute { public DllImportAttribute(string dllName) {...} public CallingConvention
阅读全文
摘要:转自:http://hacker.cnblogs.com/archive/2004/08/12/32563.aspx1, PInvoke什么意思? Platform Invocation Services2, 干什么用? 导入外部函数?什么是外部函数,就是不属于.Net托管的函数。3,如何用?看下面的例子。用[DllImport(dllname)]来实现,但是首先要把System.Runtiime.InteropServices using进来。但是不using也行,就要敲全称,随你便了。[DllImport("user32.dll")]staticexternintMessageBoxA(i
阅读全文
摘要:最近在公司实习接到一个新的项目需求,大体说来,需要实现C++与C#语言之间的互操作。听起来有点抽象,其实就是能够用C++代码调用.NET平台FCL中的工具类,而C#代码也能够反过来调用C/C++编写好的DLL中的函数。 C++调用DOTNET基础类库很容易,毕竟DOTNET平台就是为实现language independant这个目标而设计的,它通过C++/CLI为传统的C++语言能够在全新平台下...
阅读全文
摘要:所谓托管(Managed)代码通常指.NetFramework里面的代码,例如VB.Net、C#代码,原生(Native)代码指的是用原先的C/C++开发的代码。大部分开源代码往往是原生(Native)代码,因为这样的代码可以在多种平台上(Windows/Unix/Linux/MacOs)编译运行,而托管(Managed)代码,由于目前.Net Framework不具有多平台的兼容性,只能在Win...
阅读全文

浙公网安备 33010602011771号