以下就是我总结的简单的实例. 此时VS2003 UNICODE字符用的参数类型为wchar_t* 类型, MFC应用程序调用此VS2003 UNICODE字符后编译同过, 但不能连接.所以要相上用上面提到的解决方案了。
在此简单说明一下设置使用VS2003 UNICODE字符集的方法:
选择项目属性的"C/C++"=>"预处理器"右边的"预处理器定义"中添加_UNICODE;UNICODE;如果是MFC项目,在项目属性的"连接器"=>"高级"中的"入口点"处加上wWinMainCRTStartup
以上操作后项目就使用UNICODE字符集.此时TCHAR不是原来的char类型,而是wchar_t类型,LPCTSTR也是wchar_t*类型了.(更多有关UNICODE编程问题可以查看http://www.vckbase.com/document/viewdoc/?id=642)
回到原文.在MSDN中的LNK2019错误信息的说明后,发现MFC项目默认设置了/Zc:wchar_t编译选项.但Console项目中默认是不设置此项的.解决方案:在项目属性"C/C++"=>"语言"中的"将wchar_t视为内置类型"上选择"否".之后编译连接OK.
在此给出实例代码:
- DLL中的导出函数声名
- int __declspec(dllexport) FindFile( LPCTSTR lpFileName );
- 在MFC项目中要用到以上DLL中声名的函数.(MFC项目已设置为UNICODE)
- FindFile( _T( "FileName" ) );
工作需要做了一个使用UNICODE字符集的DLL库.应用程序用MFC库,也使用了UNICODE字符集.但在编译连接的时候总是发生LNK2019的错误.但在Console项目中是没有此错误的.重新检查了所有项目的属性,是否正确设置为使用UNICODE字符集#t#
有四种VS2003 UNICODE字符标准化表单。最重要的是标准化表单 C,因为它是用于万维网的字符模型的最常用表单。Macromedia 提供其他三种 Unicode 标准化表单作为补充。
在 Unicode 中,有些字符看上去很相似,但可用不同的方法存储在文档中。
例如,“”(e 变音符)可表示为单个字符“e 变音符”,或两个字符“正常拉丁语 e”+“组合变音符”。Unicode 组合字符是与前一个字符结合使用的字符,因此变音符会显示在“拉丁语 e”的上方。这两种形式都显示为相同的印刷样式,但保存在文件中的每种形式是不同的。
标准化是指确保可用不同形式保存的所有字符都使用相同的形式进行保存的过程。即,文档中所有“”字符都保存为单个“e 变音符”或“e”+“组合变音符”,而不是在一个文档中保存为这两种形式。
我特意注意了下,相同代码内容的两个文档,使用了BOM的文档字节比未使用的文档字节多3个字节。