社区
嵌入开发(WinCE)
帖子详情
C#中如何调用自己写的驱动程序
popdrummer
2011-11-17 11:19:03
前段时间写了个GPIO驱动程序,生成了一个dll文件,想用C#开发的应用程序调用这个驱动。查了一些资料,给的方法有用[DLLImport]来调用dll文件,然后声明调用函数;还有说用windows API函数CreateFile,DeviceIOControl,CloseHandle,来对设备进行操作,可是C#中有这些函数么,现在有点迷糊了,烦请高手给一个清晰的思路。
...全文
988
7
打赏
收藏
C#中如何调用自己写的驱动程序
前段时间写了个GPIO驱动程序,生成了一个dll文件,想用C#开发的应用程序调用这个驱动。查了一些资料,给的方法有用[DLLImport]来调用dll文件,然后声明调用函数;还有说用windows API函数CreateFile,DeviceIOControl,CloseHandle,来对设备进行操作,可是C#中有这些函数么,现在有点迷糊了,烦请高手给一个清晰的思路。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
popdrummer
2011-11-17
打赏
举报
回复
[Quote=引用 2 楼 northcan 的回复:]
CreateFile,DeviceIOControl,CloseHandle这些都是WinCE系统的API函数。
应用程序可以通过这几个API与流驱动进行交互。
应用层调用CreateFile,会间接调用流驱动的XXX_Open,打开流驱动
应用层调用DeviceIOControl,会调用流驱动的XXX_IOControl,针对不同的Ioctls,做相应的工作。
应用层调用CloseH……
[/Quote]
这些我已经搞清楚了,我迷糊就在于我自己写了一个驱动,驱动生成了一个GPIODrv.dll文件,那我在C#中编写应用程序时,需不需要将这个文件用DllImport引用进来,如果需要,如何使用?
popdrummer
2011-11-17
打赏
举报
回复
[Quote=引用 3 楼 northcan 的回复:]
回完了帖子才发现楼主的结贴率:0.00%
[/Quote]
呵呵,这是我发的第二个帖子,第一个帖子还没有解答完,谢谢你的回答,我试一下
northcan
2011-11-17
打赏
举报
回复
回完了帖子才发现楼主的结贴率:
0.00%
northcan
2011-11-17
打赏
举报
回复
CreateFile,DeviceIOControl,CloseHandle这些都是WinCE系统的API函数。
应用程序可以通过这几个API与流驱动进行交互。
应用层调用CreateFile,会间接调用流驱动的XXX_Open,打开流驱动
应用层调用DeviceIOControl,会调用流驱动的XXX_IOControl,针对不同的Ioctls,做相应的工作。
应用层调用CloseHandle,会调用流驱动的XXX_Close,关闭驱动
c#是托管代码,不像native c++,c++可以直接调用这几个Windows CE的API函数。
c#需要先调用DllImport,引入这些函数的声明,之后就可以像c++一样使用它们了。
具体这几个函数的用法,参考MSDN。
91program
2011-11-17
打赏
举报
回复
CreateFile,DeviceIOControl,CloseHandle 这些函数是 CE 系统的,搞清楚调用方法都可以有。
popdrummer
2011-11-17
打赏
举报
回复
[Quote=引用 6 楼 northcan 的回复:]
呵呵,看来你没看懂我的回复。
GPIODrv.dll是驱动
------------
应用
------------
系统
------------
驱动
------------
应用层 需要通过 系统 才能够让驱动完成某种工作。驱动是由系统来管理的。
所以你写应用的时候,不用也不能够去管GPIODrv.dll。
我上面已经说了,你调用的是系统的API,比如Cr……
[/Quote]
已经成功了,谢谢你的帮助,加分结贴!
northcan
2011-11-17
打赏
举报
回复
呵呵,看来你没看懂我的回复。
GPIODrv.dll是驱动
------------
应用
------------
系统
------------
驱动
------------
应用层 需要通过 系统 才能够让驱动完成某种工作。驱动是由系统来管理的。
所以你写应用的时候,不用也不能够去管GPIODrv.dll。
我上面已经说了,你调用的是系统的API,比如CreateFile,系统会去调用你GPIODrv.dll导出的XXX_Open函数。而不是你应用层直接调用GPIODrv.dll的导出函数。
楼主应该补一补操作系统的知识吧。
具体点,在wince下驱动是有驱动管理器device.dll来加载并管理的。你在写应用的时候不会直接调用它。
C#
写
的驱动加载程序
开发工具:VS2010。rar包里面包含所有项目文件,程序调试通过,里面的类、方法可以直接被移植到你的项目
中
。
C#
驱动备份神器
当初的实现是这样的,通过编
写
一个 DLL 来
调用
服务控制台 API 从而完成
驱动程序
的安装, 然后再在
C#
(应用程序是使用的
C#
WinForm ,
驱动程序
必须和这个应用程序通信)
中
通过平台
调用
, 访问这个 DLL ,这样就可以实现
驱动程序
的动态加载以及动态启动服务和停止服务等等操作了。 而在下面呢,我也算是对以前
写
的那个 DLL 做一个总结,将其总结为一个
C#
类,这样以后用起来会更加方便。 整个的类,我按分层的思想将其分为三块(其实这里将其这样划分不是非常合适) DriverEntity.cs 这里即是所谓的实体层,在该类下面呢,主要包括的是将要在 DriverBLL
中
使用到的一些常量数据, 这些数据呢包括服务的类型,服务启动类型,当然也包括了将会使用到的一些结构类型等等信息。 DriverDAL.cs 这个类即是所谓的数据访问层, 一般来说,数据访问层用在使用数据库的情况下比较合适, 但是在这里我将其抽象为只要是提供最基本的数据服务的 API ,我都将其放在数据访问层
中
, 所以这里主要是
C#
平台
调用
时,对于将要
调用
的 Win32 API 的一个声明, 其
中
包括了 CreateFile ,OpenService 等等 API 的声明。 DriverBLL.cs 这里就是所谓的业务逻辑层了,其实呢,说白了,其
中
包括几个重要的方法的实现, 比如启动
驱动程序
服务,停止
驱动程序
服务,安装启动程序,卸载
驱动程序
等方法的实现。 该类是为应用程序提供
驱动程序
安装功能的直接类。
C#
调用
Labview DLL案例,源码,文档
才包内包括了labview生成DLL源码,.NET
调用
DLL源码,还有开发过程的源码。希望能帮到大家,如有问题请联系我QQ330876583。大家一起讨论。程序我已经测试过了没有问题,如有些问题没有详细
写
清楚,可以直接联系我。
德卡T10 四合一读卡器,
C#
Demo程序
德卡这个机器存在很多版本,我开发的这台
C#
Demo程序,使用的库是DC_Reader.dll这个,由于山东电子健康卡的需要,开发内容
中
只针对以下卡类型。读卡类型,接触式的诊疗卡,社保卡,身份证,电子健康卡(二维码),自己按照文档可调试其他卡类型(本身支持自动寻卡)。包含全套的源码+一套测试的程序。并包含使用文档。
安捷伦频谱仪自动控制
驱动程序
c语言
写
的自动控制频谱仪的部分
驱动程序
,实现频谱仪初始化,获得mark点等功能
嵌入开发(WinCE)
19,523
社区成员
41,571
社区内容
发帖
与我相关
我的任务
嵌入开发(WinCE)
硬件/嵌入开发 嵌入开发(WinCE)
复制链接
扫一扫
分享
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章