一个关于.net下面的底层设备调用问题
来源:互联网 发布:民族艺术研究 知乎 编辑:程序博客网 时间:2024/04/29 23:56
用.net搭建了一个驱动的类库,然后需要用它调用设备厂商提供的库函数来编写自己的驱动程序,结果遇到了很奇怪的问题。
因为设备厂商提供的是一个.h头文件,是给c++用的,.net无法直接引用。于是按照开发手册,直接找到设备的驱动文件xx.dll,本来以为在.net下面直接用DLLImport就可以了,可结果呢,呵呵……
首先是Import进来了驱动的load方法,经过调试,结果是调用成功。
然后是Import进来了驱动的Open方法,这次有意思了。无论是单步调试还是运行,Open方法都无法成功执行,报告的错误是“程序模块非法”,真晕啊!可是使用VS2003的那个“执行下一步”的按钮,Open方法就能成功执行,真是奇怪死了!
无奈之下,只好反汇编一下看看了,发现在call的地方有一个区别,这个不是代码的区别,而是程序运行的区别。当不使用“执行下一步”的按钮时,call立刻返回,而使用那个按钮,call则会等待函数执行完成之后返回。这个可真是奇怪了啊!!
怎么办呢?我想到用c++调用驱动的库文件,编译成一个dll,然后用.net再调用这个dll。结果还是不行,跟上面直接Import的结果一模一样。
不过最后问题还是解决了,我把load和open两个方法一起封装进了一个方法里面,这次open方法成功执行了。想来想去,感觉是.net的虚拟机对硬件中断的支持有些问题吧,或者是我的使用方法有问题。现在依然不明白为什么把两个方法封装进了一个函数里面之后就ok了……
不过虽然还是不清楚到底是为什么,但是好算也提供了一个解决.net同底层设备访问的问题吧,呵呵。
因为设备厂商提供的是一个.h头文件,是给c++用的,.net无法直接引用。于是按照开发手册,直接找到设备的驱动文件xx.dll,本来以为在.net下面直接用DLLImport就可以了,可结果呢,呵呵……
首先是Import进来了驱动的load方法,经过调试,结果是调用成功。
然后是Import进来了驱动的Open方法,这次有意思了。无论是单步调试还是运行,Open方法都无法成功执行,报告的错误是“程序模块非法”,真晕啊!可是使用VS2003的那个“执行下一步”的按钮,Open方法就能成功执行,真是奇怪死了!
无奈之下,只好反汇编一下看看了,发现在call的地方有一个区别,这个不是代码的区别,而是程序运行的区别。当不使用“执行下一步”的按钮时,call立刻返回,而使用那个按钮,call则会等待函数执行完成之后返回。这个可真是奇怪了啊!!
怎么办呢?我想到用c++调用驱动的库文件,编译成一个dll,然后用.net再调用这个dll。结果还是不行,跟上面直接Import的结果一模一样。
不过最后问题还是解决了,我把load和open两个方法一起封装进了一个方法里面,这次open方法成功执行了。想来想去,感觉是.net的虚拟机对硬件中断的支持有些问题吧,或者是我的使用方法有问题。现在依然不明白为什么把两个方法封装进了一个函数里面之后就ok了……
不过虽然还是不清楚到底是为什么,但是好算也提供了一个解决.net同底层设备访问的问题吧,呵呵。
- 一个关于.net下面的底层设备调用问题
- 关于.NET调用外部CSS的问题
- 关于struct调用sizeof的一个问题
- 关于字符底层处理的问题
- 关于HashMap底层的一些问题
- 关于Fragment下面onActivityResult()无回调的问题
- 请教大家一个关于.NET 的另外一个问题
- android下面通过ndk建立一个虚拟触摸屏设备可以被sendevent调用
- 关于ASP.NET AJAX调用WEBSERVICE的问题
- 关于vb.net 调用win32API Reamprocessmemory的问题
- 关于asp.net前台js调用后台方法的问题
- 关于函数调用的loop的一个问题
- NET下面调用Access中存储过程的方法
- .Net 2.0开始支持泛型,下面给出摘录一个MSDN上关于泛型的例子
- 请教一个关于WEBFORM 调用外部EXE程序的问题
- 关于Delphi下子类调用父类虚函数的一个问题
- 请教 一个关于双方调用的问题
- 一个关于Cookie的访问与调用问题
- 如何准备简历
- 第一次博客
- 传说中不让vsftp在xinetd.d下面跑是这样弄的
- 用存储过程实现ASP对数据库访问
- 个人:名字的由来
- 一个关于.net下面的底层设备调用问题
- 关于javascript的调试
- ASP脚本如何调用Oracle存储过程
- 深入了解表格的属性
- 存储过程介绍及asp+存储过程的使用
- 关于OpenLaszlo中tree的滚动条问题,尤其是横向滚动条
- 一切都得从零开始
- 实现分页的通用存储过程
- 04-20学到的