关于dllimport的使用

最近做一个动态加载插件的项目,插件中的dll 主要是各厂商各型号的读卡器的通用类库,stdapi.dll,WltRS.dll,有的还有进一步封装的dll,主要是为了简化通用类库的操作。

这些类库都是用C语言,或者C++来编写的,我的项目是用C#语言编写,通过Dllimport来调用这些非托管dll的方法。

在做这个项目的时候,由于之前的读卡器类库都是通用的,所以即时使用两款或者更多款读卡器设备,加载的都是同一类dll,不会出现问题。

但是在开发与通用类库不兼容的插件的时候(都是读卡器插件),问题出现了。

一:输入用户名,密码,登陆系统。

 1:该用户能使用的设备如果都是调用通用类库的读卡器,那么使用起来没有问题;

 2:该用户能使用的设备只要有一款与其他的不同,那么在切换的时候问题就出现了。

  什么问题呢?

  假如现在有两个设备,A和B,A属于可以调用通用类库的设备,B不能调用通用类库,但是有自己的一套单独的类库。

  当我启用A设备的时候,第一次执行DllImport(“sdtapi.dll”)或者DllImport(“WltRS.dll”)后,那么这两个dll就会加载到内存中。

  这个时候我把A设备禁用,启用B设备,B设备也有这样的调用语句,DllImport(“sdtapi.dll”)或者DllImport(“WltRS.dll”),但是B设备的这两个dll与A设备的不同,

  大家猜猜看,这个时候B设备调用的是哪一个dll??

  一开始,我以为B设备调用的是自己目录下的dll。但是经过多次试验,我发现我错了。

  只要是同名的dll,如果不指定绝对路径方式进行加载,那么第一次加载之后的所有调用语句都是调用的第一次加载的那个dll中的方法。

  所以就造成了设备使用的紊乱。但是如果这样 DllImport(“sdtapi.dll”)或者DllImport(“WltRS.dll”),和DllImport(“C:\\sdtapi.dll”)或者DllImport(“C:\\WltRS.dll”),

  调用的却不是同一个dll,操作系统就会分别调用。我们的程序不能这样写,不然对用户的约束性就太大了。。

  针对这个问题,我的解决办法是,将各个插件目录下的文件重新命名,然后将代码中的Dllimport中的代码改成一致的名字,就OK了。

 

转载于:https://www.cnblogs.com/onsuccessway/p/3370257.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/259294.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何在MVCsheet表单页面的后台取到页面自定义字段的值?

问题&#xff1a;<asp:HiddenField id"test" runat"server"/> 在前台加了这样一个隐藏元素&#xff0c;mvcsheet表单页面&#xff0c;如何在后台获取到值&#xff0c;直接使用 test.value一直是空的。 前台经过一系列判断处理写入该值&#xff0c;需…

BigDecimal.setScale 处理java小数点

BigDecimal.setScale()方法用于格式化小数点 setScale(1)表示保留一位小数&#xff0c;默认用四舍五入方式 setScale(1,BigDecimal.ROUND_DOWN)直接删除多余的小数位&#xff0c;如2.35会变成2.3 setScale(1,BigDecimal.ROUND_UP)进位处理&#xff0c;2.35变成2.4 setScale(1,B…

C++的字符串分割函数

转载&#xff1a;http://blog.csdn.net/shanzhizi/article/details/17189267 C的字符串没有分割函数&#xff0c;因此需要自己写方便使用。而受到开发工具的影响&#xff0c;有很多用起来比较麻烦啦&#xff0c;下面这个比较不错奥。 用STL进行字符串的分割 涉及到string类的…

计算机无法正常更新,无法完成更新正在撤销更改请不要关闭你的计算机如何修复...

我们电脑开机的时候可能会遇到各种问题&#xff0c;比如就有用户发现电脑开机的时候&#xff0c;一直提示无法完成更新正在撤销更改请不要关闭你的计算机&#xff0c;等待了很长时间也进不去系统&#xff0c;遇到这样的问题该怎么办呢&#xff1f;不用担心小编给大家支招&#…

水一篇

发件人标题发送时间处理系统通知您的博客申请已批准2013-10-15 13:58删除系统通知博客园博客申请通知2013-10-15 12:55删除系统通知您的博客申请未通过审批2013-10-13 11:21删除系统通知博客园博客申请通知2013-10-13 11:07删除系统通知您的博客申请未通过审批2013-10-13 11:06…

如何去掉jQWidgets中TreeGrid和Grid右下角的链接

关于如何去掉这个水印&#xff0c;这是官方的说法。 更新了jQWidgets版本&#xff0c;发现在使用过程中发现每次渲染完TreeGrid和Grid后会在表格右下角出现一个www.jqwidgets.com的span标签。 在相关的脚本中搜索www.jqwidgets.com相关的关键字都没有对应结果。于是准备从其父容…

华为2015年实习生招聘考试试题

第一题&#xff1a; 描述: 目描述&#xff1a; 编写一个函数&#xff0c;将字符串中的大写的字母(A~Z)挑出来&#xff0c;同时保留原字符串中的空格&#xff0c;将挑出的大写字母和空格按原始位置组成新的字符串。 例如&#xff1a; 1&#xff09;输入&#xff1a;AUStralia&…

【NOIP2011 Day 2】观光公交

【问题描述】 小城Y市&#xff0c;拥有n个景点。由于慕名而来的游客越来越多&#xff0c;Y市特意安排了一辆观光公交车&#xff0c;为游客提供更便捷的交通服务。观光公交车在第0分钟出现在1号景点&#xff0c;随后依次前往2、3、4……n号景点。从第i号景点开到第i1号景点需要D…

基本数据类型的自动装箱

这里以Integer类型举例&#xff1a; Integer a 1; a 2; 编译后.calss文件是这样的 Integer a Integer.valueOf(1); 自动装箱 a Integer.valueOf(a.intValue() 2); 自动拆箱&#xff0c;再自动装箱 转载于:https://www.cnblogs.com/feiZhou/p/9344494.html

自媒体和计算机相关吗,做自媒体,台式电脑跟笔记本电脑用哪个好呢?

四阿哥fly回答数&#xff1a;143 | 被采纳数&#xff1a;162019-06-29 12:16:21作为去年折腾了一年自媒体&#xff0c;各种情况遇到过&#xff0c;分享下台式电脑和笔记本到底哪个好&#xff1f;好在哪里&#xff1f;如果真的要选择&#xff0c;个人还是推荐用台式比较好。工…

JS脚本显示当前日期+星期几[转]

以下的代码提供了显示当前日期和星期几的实现方法&#xff1a; function writeDateInfo() { var day""; var month""; var ampm""; var ampmhour""; var myweekday""; var…

openCV中waitKey函数介绍

#include <opencv2/opencv.hpp> #include < iostream > #include <window.h> using namespace cv; using namespace std;int main() {Mat im;double duration;im imread("1.jpg");// 测试没有namedWindow时的waitKey执行时间duration static_cas…

JavaScript indexOf() 方法 和 lastIndexOf() 方法

indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置。 lastIndexOf() 方法可返回一个指定的字符串值最后出现的位置&#xff0c;在一个字符串中的指定位置从后向前搜索。 语法&#xff1a; indexOf() &#xff1a; stringObject.indexOf(searchvalue,fromi…

React进阶—性能优化

React性能优化思路 软件的性能优化思路就像生活中去看病&#xff0c;大致是这样的&#xff1a; 使用工具来分析性能瓶颈&#xff08;找病根&#xff09;尝试使用优化技巧解决这些问题&#xff08;服药&#xff09;使用工具测试性能是否确实有提升&#xff08;疗效确认&#xff…

内蒙古银行银行招聘计算机研究生,内蒙古银行招聘公告

出国留学网考研报名资讯&#xff1a;内蒙古2015考研报考公告&#xff0c;希望仔细阅读考研报名公告&#xff0c;及时进行报名&#xff0c;尽量避开报名高峰期!内蒙古2015考研报考公告一、关于报考点的的安排我区共设12个报考点&#xff1a;呼和浩特市招生考试管理中心、内蒙古大…

ubuntu 13.04 telnet 详细配置

1. sudo vi /etc/xinetd.d/telnet并加入以下内容&#xff1a;# default: on# description: The telnet server serves telnet sessions; it uses \# unencrypted username/password pairs for authentication.service telnet{disable noflags REUSEsocket_type streamwait …

C++定义隐式转换函数,将类转换为内部的一个成员变量

C中单参数构造函数若不声明为explict&#xff0c;在合适的场合可以产生隐式转换&#xff1a;由成员变量类型转换为类类型。 下面的代码展示如何实现反向的转换&#xff1a; Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/…

2015年百度面经

百度问的是开放性的问题&#xff0c;应该是为了考察你的综合能力吧&#xff0c;问了两个问题 一&#xff0c;html&css 涉及的内容 块元素与行内元素&#xff0c;浮动&#xff0c;清除浮动 1&#xff0c;一个100px的容器&#xff0c;里面塞了一个空的div&#xff0c;这个di…

计算机网页设计与制作论文,网页设计与制作论文

二十一世纪是信息化的时代&#xff0c;通过互联网&#xff0c;就能达到足不出户便可了解世界的目的。为了加深对互联网的了解&#xff0c;《网页设计与制作》这门课的出现就成为了必然。1《网页设计与制作》现状问题分析(1)对课程不了解很多学生都有这个困惑&#xff0c;这门课…

mybatis中#{}和${}的区别

http://www.cnblogs.com/davidwang456/p/4929426.html转载于:https://www.cnblogs.com/xtdxs/p/6666017.html