用LoadLibrary加载DLL失败,为什么呢?

snowwood 2009-03-30 02:50:10
我用的是VC2005,生成了一个DLL,然后在程序中加载这个DLL,如下:
HINSTANCE hDll = ::LoadLibrary("D:\\hkrt.dll");
DWORD dwErr = ::GetLastError();
执行结果是这样的:在我的开发机器上加载是正常的,但把程序和DLL放在一台没有装VC2005的机器上执行时,加载就失败了,hDll的值是0,dwErr的值是14001,查了查“Error Lookup”,14001对应的描述是:“由于应用程序配置不正确,应用程序未能启动。重新安装应用程序可能会纠正这个问题”。
我先后试了三台没有安装VC的机器,都是这个问题。
我上网查原因,有人说需要安装“.Net Framework”,于是我下载了“.Net Framework2.0”并安装,之后动态库可以正常调用了。
这个程序和这个DLL是需要打成安装包的,如果再把“.Net Framework2.0”打进安装包,安装包的体积就会变得很大,由于一些原因,生成的安装包不能很大。
我奇怪的是,为什么调用一个标准的动态库还需要在机器上安装.Net呢?不安装不行吗?
我想问一下,有什么方法可以在不安装.Net的情况下正常调用?
谢谢了!
...全文
2893 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
我遇到过类似问题。我的dll用的是共享DLL方式编译的,结果在无VS2008的电脑上无法运行,也是14001错误。把DLL改为静态DLL就修正了该问题。
glsoft2006 2009-03-31
  • 打赏
  • 举报
回复
两个方案:
1.将代码在VC6下重新编译一下(不支持降解,需生成同成同名同类型工程,然后将源文件替换)
2.安装.Net Framework2.0

biweilun 2009-03-31
  • 打赏
  • 举报
回复

memorygc 2009-03-31
  • 打赏
  • 举报
回复
帮你顶一下
拨开云雾 2009-03-30
  • 打赏
  • 举报
回复
好像制作安装包的时候不把“.Net Framework2.0“打包进出的话,在其他机器上安装后的程式有的无法用哦
bug3000 2009-03-30
  • 打赏
  • 举报
回复
是不是你制作安装包的时候 点击安装包的项目名称 选择它的属性 看看其配置 去掉“.Net Framework2.0”,如果你已经去掉了还要的话,就改用vc6.0做吧!
snowwood 2009-03-30
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 bug3000 的回复:]
是由于加载DLL才需要“.Net Framework2.0”吗?可以把DLL设置一个最简单的函数调用试试,如果可以调用成功就是DLL引起的,否则, 不是DLL引起的,那就是跟你调用的程序有关系了。那就必须安装“.Net Framework2.0”了。因为你开发的时候是在“.Net Framework2.0”下面开发的。
[/Quote]
我的DLL中只有一个最简单的函数
extern "C" _declspec (dllexport) void Test();
我的exe程序应该也是没问题的,因为它在我的开发机上运行是正常的。
snowwood 2009-03-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 fox000002 的回复:]
难道 lz 用了 CLR
[/Quote]
能说的清楚一些吗?
我该如何做?
Dobzhansky 2009-03-30
  • 打赏
  • 举报
回复
很可能是客户机上没有 8.0 的 C/C++ 运行期库,
去下载个:
Download details: Visual C++ 2005 Redistributable Package (x86)

安装部署试试看, 8.0 的C库搞了个 side by side 部署方式
bug3000 2009-03-30
  • 打赏
  • 举报
回复
如果实在不行,有个办法就是导入到VC6.0环境下面,那就不需要“.Net Framework2.0”了。
bug3000 2009-03-30
  • 打赏
  • 举报
回复
是由于加载DLL才需要“.Net Framework2.0”吗?可以把DLL设置一个最简单的函数调用试试,如果可以调用成功就是DLL引起的,否则, 不是DLL引起的,那就是跟你调用的程序有关系了。那就必须安装“.Net Framework2.0”了。因为你开发的时候是在“.Net Framework2.0”下面开发的。
fox000002 2009-03-30
  • 打赏
  • 举报
回复
难道 lz 用了 CLR

7,540

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 VC.NET
社区管理员
  • VC.NET社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧