iconv是将一种编码格式转换为还有一种编码格式的开源库,比如能够把Windows环境下通用的ASCii(中文是GB2312)编码转换为国际通用的Unicode编码

iconv最新版本号仅仅支持MingW和Cygwin编译

1. 下载 iconv 库并解压,眼下最新版本号为 1.14

         http://ftp.gnu.org/pub/gnu/libiconv/

2、新建一个VC空project(libIconv)

(1)libIconvproject下新建一个目录Iconv

(2)将下载的库中lib目录下的全部文件复制到这个目录下

(3)将烤入到Iconv目录下的config.h.in重命名为config.h

(3)将库中libcharset/lib/localcharset.c文件复制到这个目录下

(4)将库中include目录下iconv.h.in文件重命名为iconv.h放在Iconv目录下

(5)将库中scrLib/localcharset.h文件拷到Iconv目录下

3、project中加入现有项,将 iconv.c ,localcharset.c 加入到project中.

4、project属性->C/C++ –>附加包括文件夹:../Iconv;

5、project属性:常规->配置类型->静态库(.lib)

6、改动文件里的BUG:

(1) iconv.h :

1).删除掉全部的 @ 符号 (14处) 

2).改动25行: extern DLL_VARIABLE int _libiconv_version;

为  extern /*DLL_VARIABLE*/ int _libiconv_version;  

3).改动83行:extern size_t iconv (iconv_t cd, ICONV_CONST char* * inbuf, size_t *inbytesleft, char* * outbuf, size_t *outbytesleft);

为 extern size_t iconv (iconv_t cd, const char* * inbuf, size_t *inbytesleft, char* * outbuf, size_t *outbytesleft);

(2)localcharset.c:

凝视掉76行:  # include "configmake.h"

7、右击解决方式。选择生成解决方式。

得libIconv.lib静态链接库。头文件是iconv.h(Iconv目录下)

使用:

#include <iostream>

#include <string>

using namespace std;

#include "iconv.h"

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





int code_convert(char *from_charset,char *to_charset,const char *inbuf, size_t inlen,char *outbuf, size_t outlen)

{

iconv_t cd;

const char **pin = &inbuf;

char **pout = &outbuf;





cd = iconv_open(to_charset,from_charset);

if (cd==0) return -1;

memset(outbuf,0,outlen);

if (iconv(cd, pin, &inlen,pout, &outlen)==-1) return -1;

iconv_close(cd);

return 0;

}





* UTF-8 to GBK  */

int u2g(const char *inbuf, size_t inlen, char *outbuf, size_t outlen)

{

return code_convert("UTF-8","GBK",inbuf,inlen,outbuf,outlen);

}





* GBK to UTF-8 */

int g2u(const char *inbuf, size_t inlen, char *outbuf, size_t outlen)

{

return code_convert("GBK", "UTF-8", inbuf, inlen, outbuf, outlen);

}





void readFile(const char* pchFileName,string &strFileContent)

{

char* buffer = NULL;

int nLen = 0;

FILE *fp = fopen(pchFileName,"rb");

if (fp == NULL)

{

cout << pchFileName << " open failed!" << endl;

exit(1);

}





fseek(fp,0L,SEEK_END);      //文件指针移到文件尾  

long fsize = ftell(fp);     //得到当前指针位置,既文件的长度

rewind(fp);                 //文件指针恢复到文件头位置

//动态申请空间,为保存字符串结尾标志'\0'。多申请一个字符的空间。

buffer = (char*)malloc(sizeof(char)*fsize+1);

if (buffer == NULL)

{

cout << "memory error!" << endl;

fclose(fp); //不再使用文件,关闭

exit(1);

}





nLen=fread(buffer,sizeof(char),fsize,fp);

buffer[nLen] = '\0';//加入字符串结尾标志

string strBuffer(buffer);

strFileContent = strBuffer;

free(buffer);

buffer = NULL;//释放后也要把指针设成NULL。避免野指针。

fclose(fp);

}





int main()

{





string strFileContent;

readFile("3.txt",strFileContent);

cout << strFileContent << endl;





size_t iInBytes,oOutBytes;

iInBytes = strFileContent.length();

oOutBytes = 3*iInBytes+1;

char *pchDestStr = new char[oOutBytes];

memset(pchDestStr,0,oOutBytes);

g2u(strFileContent.c_str(),iInBytes,pchDestStr,oOutBytes);

cout << pchDestStr << endl;



system("pause");

return 0;

}

VS2008编译iconv静态链接库的更多相关文章

  1. VS2010编译Boost 1.57 静态链接库

    http://www.cnblogs.com/cuish/p/4175491.html 0.前提 Boost库版本 1.57.0 下载地址 http://www.boost.org/users/his ...

  2. App开发流程之数据持久化和编译静态链接库

    先记录数据持久化. iOS客户端提供的常用数据持久化方案:NSUserDefaults代表的用户设置,NSKeydArchiver代表的归档,plist文件存储,SQLite数据库(包括上层使用的Co ...

  3. GCC 编译使用动态链接库和静态链接库

    1 库的分类 根据链接时期的不同,库又有静态库和动态库之分. 静态库是在链接阶段被链接的(好像是废话,但事实就是这样),所以生成的可执行文件就不受库的影响了,即使库被删除了,程序依然可以成功运行. 有 ...

  4. GCC 编译使用动态链接库和静态链接库的方法

    1 库的分类 依据链接时期的不同,库又有静态库和动态库之分. 静态库是在链接阶段被链接的.所以生成的可执行文件就不受库的影响了.即使库被删除了,程序依旧能够成功执行. 有别于静态库,动态库的链接是在程 ...

  5. 【转】gcc 编译使用动态链接库和静态链接库

    1 库的分类 根据链接时期的不同,库又有静态库和动态库之分. 静态库是在链接阶段被链接的(好像是废话,但事实就是这样),所以生成的可执行文件就不受库的影响了,即使库被删除了,程序依然可以成功运行. 有 ...

  6. GCC编译过程与动态链接库和静态链接库

    1. 库的介绍 库是写好的现有的,成熟的,可以复用的代码.现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常. 本质上来说库是一种可执行代码的二进制形式,可 ...

  7. [转载]GCC 编译使用动态链接库和静态链接库--及先后顺序----及环境变量设置总结

    来自http://blog.csdn.net/benpaobagzb/article/details/51364005 GCC 编译使用动态链接库和静态链接库 1 库的分类 根据链接时期的不同,库又有 ...

  8. go 工具链目前[不支持编译 windows 下的动态链接库][1],不过[支持静态链接库][2]

    go 工具链目前[不支持编译 windows 下的动态链接库][1],不过[支持静态链接库][2].想要产生dll,可以这样 workaround ,参考 golang [issuse#11058][ ...

  9. GO 使用静态链接库编译 生成可执行文件 使用第三方 .a 文件,无源码构造

    go build 和 go install 都需要使用源码来进行编译.但是有时候我们只有.a或者.so文件.并不能获取到第三方库的源码,这时我们需要静态链接库编译的技巧: 上图是实验前的文件分布. 使 ...

随机推荐

  1. Spark源码学习2

    转自:http://www.cnblogs.com/hseagle/p/3673123.html 在源码阅读时,需要重点把握以下两大主线. 静态view 即 RDD, transformation a ...

  2. Intellij idea workflow 工作流插件安装

    idea提供支持的工作插件名字叫actiBPM,可以在idea中在线安装,但往往会连接不成功安装失败,所以这里提供了硬盘安装的方式: 首先是要去官网下载actiBPM插件,下载地址: http://p ...

  3. 关于微信浏览不能URL传参,URL中的问号被删除

    关于微信浏览不能URL传参,URL中的问号被删除. 尼玛难道没有人遇到过这个问题?看了微信支付SDK3.0的代码,看到urlencode 看到了几次.实际上 在微信浏览器下 header('locat ...

  4. 实现将VirtualBox 虚拟机转换为KVM虚拟机的步骤

    原来在桌面上一直使用virtualbox虚拟机管理程序(VMM)构建虚拟机安装不同的操作系统,现在 研究linux下的KVM,能否将已经建立的virtualBox虚拟客户机(guest)转换为KVM虚 ...

  5. Android实现获取应用程序相关信息列表的方法

    本文所述为Androdi获取手机应用列表的方法,比如获取到Android应用的软件属性.大小和应用程序路径.应用名称等,获取所有已安装的Android应用列表,包括那些卸载了的,但没有清除数据的应用程 ...

  6. 调用Android自带日历功能(日历列表单、添加一个日历事件)

    调用Android自带日历功能  觉得这篇文章不错,转载过来. 转载:http://blog.csdn.net/djy1992/article/details/9948393 Android手机配备有 ...

  7. oracle db_unnqiue_name db_name sid_name instance_name service_name

  8. VB.NET版机房收费系统---SqlHelper

    SqlHelper,最早接触这个词儿的时候,好像是13年的暑假,那个夏天来的比往年来的稍晚一些,呵呵,sqlhelper,翻译成中文就是数据库助手,帮手.百度百科这样对她进行阐述: SqlHelper ...

  9. FPGA STA(静态时序分析)

    1 FPGA设计过程中所遇到的路径有输入到触发器,触发器到触发器,触发器到输出,例如以下图所看到的: 这些路径与输入延时输出延时,建立和保持时序有关. 2. 应用背景 静态时序分析简称STA,它是一种 ...

  10. activity的生命周期【转】

    关于activity的生命周期,越来越感觉很重要.activity的生命周期有点像asp.net中page的生命周期,经历好几个过程.重写不同的阶段,可以完成不同的功能和效果.先上一张经典的生命周期图 ...