char*转 LPCTSTR的相关问题

MaNong--GoGoGo 2014-12-14 05:11:11



上图是孙鑫老师VC视频上的程序,编译不通过。




下面是我强制类型转换后编译的结果,生成的结果有乱码。。。
在网上找了好多 char*转LPCTSTR的方法,一一试过还是不行。
请各位老师帮忙指点一二。
...全文
292 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2014-12-15
  • 打赏
  • 举报
回复
BOOL bMbStr = IsClipboardFormatAvailable(CF_TEXT);
BOOL bWcStr = IsClipboardFormatAvailable(CF_UNICODETEXT);
if (bMbStr || bWcStr) {
    if (OpenClipboard()) {
        HANDLE hClip = NULL;
        if (bMbStr) {
            hClip = GetClipboardData(CF_TEXT);
        } else if (bWcStr) {
            hClip = GetClipboardData(CF_UNICODETEXT);
        }
        LPVOID lpBuff = (LPVOID)GlobalLock(hClip);
        if (lpBuff != NULL) {
            if (bMbStr) {
                SetDlgItemTextA(IDC_EDIT_RECV, (LPCSTR)lpBuff);
            } else if (bWcStr) {
                SetDlgItemTextW(IDC_EDIT_RECV, (LPCWSTR)lpBuff);
            }
            GlobalUnlock(hClip);
        }
        CloseClipboard();
    }
}
「已注销」 2014-12-15
  • 打赏
  • 举报
回复
一见这种问题回复都是转编码。转什么转? 直接用 SetDlgItemA 不就得了,系统本来就有 SetDlgItemA 和 SetDlgItemW 两个版本。
lx624909677 2014-12-15
  • 打赏
  • 举报
回复
那你就转一下被,各种类型的字符串都能相互之间转
赵4老师 2014-12-15
  • 打赏
  • 举报
回复
对电脑而言没有乱码,只有二进制字节;对人脑才有乱码。啊 GBK:0xB0 0xA1,Unicode-16 LE:0x4A 0x55,Unicode-16 BE:0x55 0x4A,UTF-8:0xE5 0x95 0x8A
void HexDump(char *buf,int len,int addr) {
    int i,j,k;
    char binstr[80];

    for (i=0;i<len;i++) {
        if (0==(i%16)) {
            sprintf(binstr,"%08x -",i+addr);
            sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);
        } else if (15==(i%16)) {
            sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);
            sprintf(binstr,"%s  ",binstr);
            for (j=i-15;j<=i;j++) {
                sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.');
            }
            printf("%s\n",binstr);
        } else {
            sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);
        }
    }
    if (0!=(i%16)) {
        k=16-(i%16);
        for (j=0;j<k;j++) {
            sprintf(binstr,"%s   ",binstr);
        }
        sprintf(binstr,"%s  ",binstr);
        k=16-k;
        for (j=i-k;j<i;j++) {
            sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.');
        }
        printf("%s\n",binstr);
    }
}
Evankaka 2014-12-14
  • 打赏
  • 举报
回复
字符集改为未设置看看
worldy 2014-12-14
  • 打赏
  • 举报
回复
char* 改为LPCTSTR 字符集改为unicode
MaNong--GoGoGo 2014-12-14
  • 打赏
  • 举报
回复
引用 7 楼 pcradio 的回复:
[quote=引用 6 楼 jixianghahaxiao 的回复:] [quote=引用 5 楼 pcradio 的回复:] 详见:http://blog.csdn.net/norains/article/details/1461174
看了您给我发的链接,我按照上面的方法试了,可以编译通过。但运行的时候有问题。 我这做的是孙鑫老师第17个视频上的 进程间通信(剪切板) 历程。 为什么接受端,收不到数据,并且打开写字板,点粘贴,会出现异常(发送中文字符的时候)。 下图中的程序就是 接收按钮的 处理函数。您能否帮我再解答一下?感激不尽
阿源是少年 2014-12-14
  • 打赏
  • 举报
回复
引用 6 楼 jixianghahaxiao 的回复:
[quote=引用 5 楼 pcradio 的回复:] 多字节编码的话,char* 转LPCTSTR应该不会有什么问题,没有选项的话,用MultiByteToWideChar来转试试
#include <windows.h> #include <lm.h> #include <stdio.h> BOOL GetFullName( char *UserName, char *Domain, char *dest ) { WCHAR wszUserName[UNLEN+1]; // Unicode user name WCHAR wszDomain[256]; LPBYTE ComputerName; struct _SERVER_INFO_100 *si100; // Server structure struct _USER_INFO_2 *ui; // User structure // Convert ANSI user name and domain to Unicode MultiByteToWideChar( CP_ACP, 0, UserName, strlen(UserName)+1, wszUserName, sizeof(wszUserName)/sizeof(wszUserName[0]) ); MultiByteToWideChar( CP_ACP, 0, Domain, strlen(Domain)+1, wszDomain, sizeof(wszDomain)/sizeof(wszDomain[0]) ); return (TRUE); } 由于初学,有点看不懂,您能否告知我该如何使用啊? [/quote] 详见:http://blog.csdn.net/norains/article/details/1461174
MaNong--GoGoGo 2014-12-14
  • 打赏
  • 举报
回复
引用 5 楼 pcradio 的回复:
多字节编码的话,char* 转LPCTSTR应该不会有什么问题,没有选项的话,用MultiByteToWideChar来转试试
#include <windows.h> #include <lm.h> #include <stdio.h> BOOL GetFullName( char *UserName, char *Domain, char *dest ) { WCHAR wszUserName[UNLEN+1]; // Unicode user name WCHAR wszDomain[256]; LPBYTE ComputerName; struct _SERVER_INFO_100 *si100; // Server structure struct _USER_INFO_2 *ui; // User structure // Convert ANSI user name and domain to Unicode MultiByteToWideChar( CP_ACP, 0, UserName, strlen(UserName)+1, wszUserName, sizeof(wszUserName)/sizeof(wszUserName[0]) ); MultiByteToWideChar( CP_ACP, 0, Domain, strlen(Domain)+1, wszDomain, sizeof(wszDomain)/sizeof(wszDomain[0]) ); return (TRUE); } 由于初学,有点看不懂,您能否告知我该如何使用啊?
阿源是少年 2014-12-14
  • 打赏
  • 举报
回复
多字节编码的话,char* 转LPCTSTR应该不会有什么问题,没有选项的话,用MultiByteToWideChar来转试试
MaNong--GoGoGo 2014-12-14
  • 打赏
  • 举报
回复
引用 1 楼 lx624909677 的回复:
项目,属性,选择多字符集
这个我试过,在VS2013中有这个选项,但是不能选,说是已经废弃了,要是非得选这个的话,那就还得去官网下载什么文件
MaNong--GoGoGo 2014-12-14
  • 打赏
  • 举报
回复
引用 2 楼 flydreamGG 的回复:
用CString转一下试试! CString str; str.Format("%S",pBuf); SetDlgitemText(...,str);
试了之后出现上面的结果,还是不行啊。
昨夜无风 2014-12-14
  • 打赏
  • 举报
回复
用CString转一下试试! CString str; str.Format("%S",pBuf); SetDlgitemText(...,str);
lx624909677 2014-12-14
  • 打赏
  • 举报
回复
项目,属性,选择多字符集

16,372

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧