动态库与UNICODE

本篇文章解决如下问题:

动态库的导出函数带有字符参数,同时,还能支持“调用者在UNICODE和非UNICODE”下都可以使用。

1. 动态库

(1) 动态库的导出函数在动态库编译的时候,其参数TCHAR就已经根据"动态库自身"的UNICODE设置情况被解析为了char还是wchar,也就是说,在动态库自身编译的时候,导出函数要么是char的,要么是wchar的,却不可能是同时支持两种的.(动态库也是个独立程序,跟所有的程序一样,它被编译出来后,要么是UNICODE版本,要么是非UNICODE版本,它不可能俩都是).

(2)根据以上描述,如果想要动态库的导出函数既可以给UNICODE客户程序用也可以给非UNICODE客户程序用,那只能定义两个函数,拿OutString为例,需要定义一个OutStringA,其其函数内部调用的所有有关于字符串的操作都是char的,再定义一个OutStringW,其函数内部调用的所有有关于字符串的操作都是wchar的.让调用程序自己选择使用A还是W

2. 调用程序

(1)根据上述第(2)的描述,调用程序需要自己选择使用A还是W,但有时候"调用程序"需要编译生成两个版本,在编码的时候既要用A也要用W,那么比较方便的方式就是用宏了,

#ifdef _UNICODE
#define OutString OutStringW
#else
#define OutString OutStringA
#endif

这样的话,调用程序直接用OutString就可以了,传参的时候就可以用TCHAR了

(2)在使用静态链接方式使用动态库的时候,我们一般直接拿动态库的导出函数.h提供给用户程序,方便.所以,也就可以把上述宏定义直接放在动态库的导出.h中了,调用者直接拿来用,方便.所以,在这个地方,要澄清一个误解,不要认为动态库采用"UNICODE与否"编译会对调用程序的"UNICODE与否"产生要求.其实,不是的,因为动态库的导出函数都显示指定了是char还是wchar,所以用"UNICODE与否"编译没有什么区别,动态库也不会让调用程序在UNICODE上必须一致.



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值