您的位置:程序门 -> vc/mfc -> 进程/线程/dll



怎么将动态dll转换成静态链接库?(基于mfc)


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


怎么将动态dll转换成静态链接库?(基于mfc)
发表于:2007-12-25 11:44:40 楼主
我原先的的项目是一个基于mfc动态dll(含资源模板等),想将它转成静态链接库,

但是后来客户的需求改变,需让客户调用的时候可以不显示我们的dll,静态链接调用。

于是我简单的用vc6模板创建了一个空的支持mfc的"win32   static   libary"模板,然后将原先动态的所有文件加过去,

但是编译好后,调用提示没有接口:
dasdf.obj   :   error   lnk2001:   unresolved   external   symbol   __imp__mydllload
release/dasdf.exe   :   fatal   error   lnk1120:   1   unresolved   externals
error   EXECuting   link.exe.

而且,lib的大小也感觉明显比dll的大小小很多,不知道需要如何处理。


(附注--尝试过方法:
简单查了一下,用工具“dll2lib"软件,外部方法转换,转了后调用根本不可用,程序一运行就死,其实有源码也没有必要用这种方法,我测试而已;
还有的是,基于mfc的静态链接库跟普通的静态链接库不同,那些应该比较简单,简单的函数定义/实现/输出,我测试过是没有问题的,但是基于mfc的有dllmain()的入口,还有一个全局的theapp,可能是由于这些,不知道还有如何处理。。



请有经验的朋友帮个忙,指点一下。谢谢!
发表于:2007-12-25 12:02:051楼 得分:0
你原来的dll没有lib文件吗?不用重建工程吧。
发表于:2007-12-25 12:05:202楼 得分:0
unresolved       external       symbol  

需要把lib加入到exe的工程去
发表于:2007-12-25 12:24:543楼 得分:0
to   1楼:
原先的dll的lib跟静态调用的lib是不同的,他们的大小就不一样,还有,静态链接库的方式使用后,是不用.dll存在的;

to   2楼:已经加了,只是检测不出来,也就是说,实际应该没有输出这个接口,转换后;
发表于:2007-12-25 12:57:494楼 得分:0

发表于:2007-12-26 07:47:255楼 得分:0
上面的链接我看了一下,无非是关于导出c++类的宏定义等基本方法,其实这些应该还是比较通用的方式,

但是暂时显示,跟我的问题关联不大,我就是不知道,有动态转换成静态的时候,为什么会不能导出,

我只是用模板重建,然后将动态的所有文件再引入,编译是没有问题,但是调用就会出现前面说的现象。

指教!
发表于:2007-12-27 17:39:596楼 得分:0
有dll工程的话,重新选择编译方式成lib

关键调用dll中函数的程序要修改吧
发表于:2007-12-27 17:40:167楼 得分:0
修改为静态调用
发表于:2007-12-27 19:21:298楼 得分:0

加调用的程序中加

#pragma   comment(lib,"xxxx.lib")

"xxxx.lib"为你的库路径,记住是完整路径
发表于:2007-12-28 21:46:049楼 得分:0
修改导出函数说明,
变为普通函数说明


快速检索

最新资讯
热门点击