搜索
查看: 1645|回复: 6
打印 上一主题 下一主题

SendMessageW发送消息,中文出现乱码

[复制链接]

11

主题

31

帖子

191

积分

一级会员

Rank: 2

积分
191
跳转到指定楼层
楼主
发表于 2018-4-1 00:13:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
代码如下,msg传入数字,字符都正常,传入汉字,接收端就是乱码了

  1. msg = "123你好"
  2. ::User32.SendMessage(wxHwnd,74/*WM_COPYDATA*/,25220,{
  3. INT typeNub;
  4. INT strLen=string.len(msg);
  5. STR strBody=msg
  6. })
  7. //收到消息为: 123浣
复制代码
回复

使用道具 举报

185

主题

2541

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
13974
沙发
发表于 2018-4-1 02:25:46 | 只看该作者
看 win.sendCopyData 的源码
回复

使用道具 举报

11

主题

31

帖子

191

积分

一级会员

Rank: 2

积分
191
板凳
 楼主| 发表于 2018-4-1 03:42:38 | 只看该作者
Jacen.He 发表于 2018-4-1 02:25
看 win.sendCopyData 的源码

刚看了,参考了代码,可中文还是乱码
不知道是不是编码问题,我还是在学习调用外部dll中,真头大啊!劳烦你再指点指点,谢谢
回复

使用道具 举报

185

主题

2541

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
13974
地板
发表于 2018-4-1 12:54:00 | 只看该作者
261041951 发表于 2018-4-1 03:42
刚看了,参考了代码,可中文还是乱码
不知道是不是编码问题,我还是在学习调用外部dll中,真头大啊!劳 ...

你几个地方写错了,str是UTF8,
一般外部程序不是unicode就是ansi,窗口程序直接用UTF8编码的很少。

第二个地方你的长度写错了,长度是字节长度,不应该用 string.len取字符长度。

你在aardio中可以正常发送,你也可以用 string.fromto转换成任意的编码。
怎么写都不会不有乱码,自己再耐心找找原因。
回复

使用道具 举报

185

主题

2541

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
13974
5#
发表于 2018-4-1 12:55:30 | 只看该作者
基础知识花点时间了解一下,尤其是编码转换、结构体这一块,不然肯定是每天会头大的
回复

使用道具 举报

11

主题

31

帖子

191

积分

一级会员

Rank: 2

积分
191
6#
 楼主| 发表于 2018-4-1 13:30:41 | 只看该作者
Jacen.He 发表于 2018-4-1 12:55
基础知识花点时间了解一下,尤其是编码转换、结构体这一块,不然肯定是每天会头大的

好的!真是奇怪了,昨晚用了各种转码行不通,今天在试试,居然没有乱码了!
谢谢,您的指点和建议
  1. msg="你好"
  2. msg=string.fromto(msg,0,936)
复制代码
回复

使用道具 举报

11

主题

31

帖子

191

积分

一级会员

Rank: 2

积分
191
7#
 楼主| 发表于 2018-4-1 13:42:18 | 只看该作者
  1. function sendText(wxHwnd,msg){                //发送文本
  2.     msg=string.fromto(msg,0,936)        
  3.         ::User32.SendMessageA(wxHwnd,74/*WM_COPYDATA*/,0,{
  4.                 INT typeNub;
  5.                 INT strLen=#msg;
  6.                 pointerstrBody=msg
  7.         })        
  8. }
复制代码
主要错误,在于
INT strLen=#msg;
这句取字节长度,我写成
INT string.len(msg);
导致接收乱码,应该就是编码时取字节长度出错了


谢谢,Jacen的知识点和提示,记录一下,以便今后查看
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

手机版|未经许可严禁引用或转载本站文章|站长邮箱|aardio.com|aardio官方社区 ( 皖ICP备09012014号 )

GMT+8, 2018-12-15 15:12 , Processed in 0.078125 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表