递归火山软件开发平台

标题: 这种wchar_t如何封装 [打印本页]

作者: 沉默流星    时间: 2025-3-13 17:02
标题: 这种wchar_t如何封装
这个wchar_t 类型应该如何封装
(, 下载次数: 42)
这是原生声明
(, 下载次数: 43)

作者: 沉默流星    时间: 2025-3-13 17:05
这种两种都试了搞不了
(, 下载次数: 39)

(, 下载次数: 35)

作者: 沉默流星    时间: 2025-3-13 17:30
urenai 发表于 2025-3-13 17:29
@ 添加  .GetText()

在2楼截图,说的这种我试过不行
作者: 创世魂    时间: 2025-3-13 18:39

去搜一下。看看类库里面有没有类似的。

(, 下载次数: 36)

作者: Xelloss0618    时间: 2025-3-13 20:01
本帖最后由 Xelloss0618 于 2025-3-13 20:08 编辑

有没学过C的基础语法啊……
这是C的数组,C的数组是指针,怎么可能是强转到 wchar_t 呢,应该是 wchar_t*另外你用文本型接收返回,也应该先分配好内存,用 置文本长度 之类的

作者: 沉默流星    时间: 2025-3-13 20:10
Xelloss0618 发表于 2025-3-13 20:01
有没学过C的基础语法啊……
这是C的数组,C的数组是指针,怎么可能是强转到 wchar_t 呢,应该是 wchar_t*另 ...

那应该怎么做
作者: urenai    时间: 2025-3-13 21:12
X总已经讲的很清楚了,还有他说的非常正确,你应该先申请一段缓冲区,再传如len

这是常识性知识,因为基本上你能用得到的winAPI,大多数在获取数据前,你都必须先申请一段内存,将指针传进去,一般还会有一个参数让你传len值,这个参数也可能是要求传入plen。
给你举个例子: recv(s,buf,len,f)
例如这个函数是获取socket中已接收的数据。
正常情况下必须在调用recv前执行:
len =4096
buf=分配内存(len)
ret=recv(s,buf,len,0)
ret >0 =实际从系统重复制 出 数据的 长度
例如调用:  指针到字节集(buf,ret)  = 实际接收到的数据。
就拿这个函数讲,如果数据大于 len 长度(他会堆叠数据,不把数据拷贝出来就一直堆在里面)

  
作者: 沉默流星    时间: 2025-3-13 21:34
urenai 发表于 2025-3-13 21:12
X总已经讲的很清楚了,还有他说的非常正确,你应该先申请一段缓冲区,再传如len

这是常识性知识,因为基本 ...

不是很懂,可有例子
作者: urenai    时间: 2025-3-13 21:37
参考  取窗口标题
作者: 沉默流星    时间: 2025-3-13 21:59
urenai 发表于 2025-3-13 21:37
参考  取窗口标题

没搜到啊
作者: Xelloss0618    时间: 2025-3-13 22:06
@<字符缓冲区>.SetLength(40);
(wchar_t*)@<字符缓冲区>.GetText();
作者: 沉默流星    时间: 2025-3-14 08:46
本帖最后由 沉默流星 于 2025-3-14 08:51 编辑
Xelloss0618 发表于 2025-3-13 22:06
@.SetLength(40);
(wchar_t*)@.GetText();

测试之后报错 (, 下载次数: 27)
(, 下载次数: 28)

  1. template<size_t nBufLen> inline int acedGetString(int cronly, const wchar_t *prompt,
  2.                                 wchar_t (& buf)[nBufLen])
  3. {
  4.     return ::acedGetString(cronly, prompt, buf, nBufLen);
  5. }
复制代码
参数2和参数3都是跳转的这个类型,如下
  1. #ifndef _WCHAR_T_DEFINED
  2.     #define _WCHAR_T_DEFINED
  3.     typedef unsigned short wchar_t;
  4. #endif
复制代码




作者: Xelloss0618    时间: 2025-3-14 08:56
沉默流星 发表于 2025-3-14 08:46
测试之后报错

报错很明显了啊,你打错字了,是 SetLength
作者: 沉默流星    时间: 2025-3-14 09:01
Xelloss0618 发表于 2025-3-14 08:56
报错很明显了啊,你打错字了,是 SetLength

我复制的的啊,应该写错了,赋值这个也是报错
作者: 沉默流星    时间: 2025-3-14 09:02
Xelloss0618 发表于 2025-3-14 08:56
报错很明显了啊,你打错字了,是 SetLength

(, 下载次数: 26)
这是复制黏贴的

作者: Xelloss0618    时间: 2025-3-14 14:48
沉默流星 发表于 2025-3-14 09:02
这是复制黏贴的

我又没打错,你这还能复制错?
看了一下,你这个 acedGetString 函数有好几个重载,下面几个你可以都试一下(推荐第一个,不用提供字符长度)。


  1. @ AcString buf;
  2. @ int ret = acedGetString(@<仅命令模式>), @<输入提示>.GetText(), buf);
  3. @ @<字符缓冲区>.SetText(buf.kwszPtr());
  4. @ return ret;
复制代码


  1. @ @<字符缓冲区>.SetLength(40);
  2. @ return acedGetString(@<仅命令模式>), @<输入提示>.GetText(), (wchar_t*)@<字符缓冲区>.GetText(), 40);
复制代码


  1. @ @<字符缓冲区>.SetLength(40);
  2. @ return acedGetString<40>(@<仅命令模式>), @<输入提示>.GetText(), (wchar_t*)@<字符缓冲区>.GetText());
复制代码

作者: 落雪有声    时间: 2025-3-15 23:53
火山这方面做的是真差劲,最起码各种类型的转换得写个文档吧,易语言过来的用户看都看不懂




欢迎光临 递归火山软件开发平台 (https://bbs.voldp.com/) Powered by Discuz! X3.4