C# 调用DLL的研究

因公司项目要求,需要针对打印方式进行更改,由之前的适用打印机驱动程序改成直接控制串并口。

对于底层控制串并口,因由其他项目上的源码可以参考,所以很顺利的就调试了出来;但对于老和新两种打印,在打印格式控制方式方面存在一部分的偏差,因此需要做一个方便操作的打印格式迁移工具,使用此工具可以非常轻易的完成迁移工作;

开始考虑了使用MFC等C++上的类库,但因对于这种界面化的操作个人感觉比较困难,因此我选择了使用C#来开发窗口程序(即迁移工具),但又遇到了一个问题,C#程序的运行,需要dot net framework的环境支持,为了一个小程序,不至于还需要安装几百兆的运行环境吧,幸运的是,从网上搜到了几种解决方法,具体技术细节及不说了,感兴趣的可以从谷歌里搜索一下“C#程序脱离.net框架的多种方法与应用”,应该能找到。

再说迁移工具,中间根据需要,需要在调整完格式时添加一个打印测试样张的工具,此时就需要调用前面所说的控制打印的基于MFC的dll来实现,此时我遇到了问题;

由于我怕以后打印动态库的名称及导出函数名称及参数出现更改,所以我就是用了C#中的动态调用DLL技术,详细技术细节也不说了,此时我遇到了问题,使用LoadLibrary调用指定名称的DLL时,总是失败,追踪错误码是1114,通过查看发现此错误码对应的错误信息是”动态链接库(DLL)初始化例程失败。“,即在初始化dll时失败导致;通过从网上了解到,出现此种情况大部分都是由于dll依赖的dll库不存在或有问题导致,至于dll依赖的dll,相信大家都应该知道使用depends工具查看,但是经过查看后,我发现其依赖的所有dll均存在,而且即便是把这些动态库都放到system32目录下还是不行,这件事就这样开始折腾了;

因在我更改打印机dll之前,公司已经在使用一套打印dll了,当我使用c#调用这个dll时一切正常,此时我就将注意力放在我更改的那些地方;因我使用的是基于MFC的动态库,因此在生成的源码里会有APP这个类,它有一个全局对象theApp,对MFC稍有了解的人都应该晓得,APP类的InitInstance一般是做初始化的工作,针对此项目,我把对其他dll的初始化工作放在了此函数中,初始化时是先确定路径,然后再初始化打印机,但因我笔记本上并没有实际接打印机,所以InitInstance就返回了false,此时当C#程序使用LoadLibrary载入的动态库在初始化时反悔了false,就出现了所谓的1114错误,即”动态链接库(DLL)初始化例程失败。”。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值