• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

Woosa

合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下。
  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

vs2008下几个CString转换char*的问题

如果你不是unicode环境,
char* 不是用CString填进去的,应该是这样
CString szParA;
CString szParB;
假设接口是:
fun(char* ParA, char* parB);
那么应该写作:
fun(szParA.GetBuffer(0), szParB.GetBuffer(0);

如果是unciode的编译环境
CString szParA;
CString szParB;

假设接口是:
fun(char* ParA, char* parB);

那么需要先转换为多字节字符串,然后才可以作为参数填写进去:
如果是wchar_t转换为char接口的可以用这个函数:
BOOL MyWideChar_tToMultiByte(LPTSTR lpcwszStr, LPSTR lpOut,INT nOutSize)
{
    DWORD dwMinSize = 0;
    dwMinSize = WideCharToMultiByte(CP_OEMCP,NULL,lpcwszStr,-1,NULL,0,NULL,FALSE);

    if(dwMinSize > nOutSize)
    {
        return FALSE;
    }
    else
    {
        WideCharToMultiByte(CP_OEMCP,NULL,lpInt,-1,lpOut,nOutSize,NULL,FALSE);
        return TRUE;
    }
}

所以两个参数需要这么转化:
char bufA[512];//多申请点,免得溢出
char bufB[512];

MyWideChar_tToMultiByte(szParA.GetBuffer(0), bufA, sizeof(bufA));
MyWideChar_tToMultiByte(szParB.GetBuffer(0), bufB, sizeof(bufB));

经过转换后,就可以作为char*类的替代品bufA、bufB作为参数填写进去了,如下:
fun(bufA, bufB);

posted on 2013-03-22 09:39  Woosa  阅读(245)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3