现在的位置: 首页 > 综合 > 正文

wince 下(动态链接库)dll调用出现相关问题

2013年10月20日 ⁄ 综合 ⁄ 共 1149字 ⁄ 字号 评论关闭

dll (动态链接库),存在两种调用方式,隐式链接与显式链接,其中隐式链接是通过 pragram comment(lib,"A.dll")

#include"A.h",显式链接是通过Loadlibrary(_T("A.dll")) ;在程序需要调用时候动态加载,但是在进行动态加载时候,有时候会出一些问题,下面是我在写一个dll的测试程序时候碰到的。

在HINSTANCE  m_hModel=LoadLibrary(_T("DLL.dll"));总是返回为空,通过getlasterror();获得的返回值为126,意思是找不到dll所依赖的组件,起初我以为无法找到DLL.dll 这个文件,后来我将该文件部署到了调用这个dll的程序的工作目录下,后来还是这样的问题,在通过另外一个功能极其简化的dll调用部署中我发现,相比之下,DLL.dll在部署的时候比我这个测试程序少了atl90.dll MFC90VD.dll msvcr90.dll msvcr90d.dll 这五个文件,通过对比项目的部署属性找到了问题所在

问题描述:进行编写dll后 通过调用程序进行调用,通过getlasterror 返回值总是为126,通过对该错误值的查找

               发现是因为所使用的dll找不到它所依赖的dll,起初将dll项目部署到调用程序的目录下仍不能够解决,

原因:

            是在部署dll的时候没有将所依赖的五个文件(atl90.dll MFC90VD.dll msvcr90.dll msvcr90d.dll)同时部署到wince系统上 面。

解决方法:

           只要在项目属性(Properties)->部署(Deployment)中的添加文件(additional Files)中如果为空的,或缺少这五个文件之一

话添加以下内容

msvcr90.dll|$(BINDIR)/$(INSTRUCTIONSET)/|%CSIDL_PROGRAM_FILES%/$(ProjectName)|0
atl90.dll|$(BINDIR)/$(INSTRUCTIONSET)/|%CSIDL_PROGRAM_FILES%/$(ProjectName)|0
msvcr90d.dll|$(BINDIR)/$(INSTRUCTIONSET)/|%CSIDL_PROGRAM_FILES%/$(ProjectName)|0
MFC90UD.dll|$(BINDIR)/$(INSTRUCTIONSET)/|%CSIDL_PROGRAM_FILES%/$(ProjectName)|0

然后重新编译,进行部署,只要被的调用和调用者以及这五个文件在同一个文件夹下,就能够通过,

上述过程,在模拟器上验证通过

   

          

抱歉!评论已关闭.