30+,vs新建模块生成dll

项目中有一个UI库,之前的工作模式是,项目中只使用头文件和生成出的dll,但是见不到源代码。

前阶段任务就是,读懂这个UI库,写好使用说明。

——后来发现,这个文档应该是写给别人看的,而别人是只关心这个库如何使用,不想听你说一堆乱七八糟的这个库如何实现的

这个阶段的任务,就是拿着源代码,在项目中加入一个模块,生成dll——听着好像很简单的一个事情。

而且在做这个事情之前,很重要的一个知识点就是:区分静态库lib和动态库dll

静态库lib,就是和普通的头文件类似把,include头文件,就有该lib的一个拷贝,用大白话讲,就是:

include一个头文件,相当于把这个头文件的代码粘贴在此处(就像宏一样)

而dll呢,一个进程中相同的dll只有有一个(内部使用引用计数),dll中可以导出变量,函数,类,具体操作是声明时加上一个export类似的宏

而对于dll的隐式加载,就是直接#paragrment("lib",xxx.lib); 然后include对应的头文件,就可以使用对应的函数。

那么这里有2点需要注意:

1. 头文件没有导出的函数,类,变量,就是局部的,而不是全局唯一的了,那么使用的内存,就是include该头文件的模块的内存。

2.导出的函数,类,变量,对于该模块来说,只提供了一个符号表,毕竟dll方式的lib其实就只是一个符号表,只有这些函数的声明,是没有定义的。——这一点也和理解windows跨模块的内存释放问题息息相关。(也就是说导出的函数或者类里面的一个类,比如string, 并不是像普通头文件那样,用的导入该dll的模块的内存,它是应该算作dll里面的内存!)

结果就是,做了很多很多天,最后才替换成功,而且需要配置很多编译选项,项目属性之类的东西。

当整个源代码copy进去直接编译的时候,会报GDI+库的错误。

询问导师,说遇到报库文件的错误的,往往都是头文件互相依赖导致的错误。后来我就去改呀改呀改这个头文件,弄得一塌糊涂的。(后来一次debug时我意外地发现,是include语句中的某个头文件无法找到该头文件导致的,由于太多的编译错误,这个真正的错误被淹没了没有被发现)

新建模块,生成dll, 大概会接触到的东西有,

项目组织文件vcprojx

项目属性(通过属性,C/C++, 链接器等 )这里会有一些链接某些文件的设置,比如说include文件的路径等等,其实蛮多需要去设置的。而且对项目属性不熟悉就会特别迷惑。我觉得应该写一篇文章,专门总结VS的解决方案下一个模块的项目属性的各个性质的。

新建模块之后的一个事情就是替换,幸好这个我的选择做对了,就是利用中间的include头文件, 详细解释如下:

项目project中大部分都include一个头文件:   mid.h

mid.h这个中间层头文件include了旧的API库,而我只需要把此处的include的旧的API库文件替换成新的API库文件即可。

多么方便啊!!!中间层——松耦合

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值