zhitian 发表于 2026-6-12 22:36:58

【求助】火山文本转LPCSTR应该怎么做?

<火山程序 类型 = "通常" 版本 = 1 />

包 火山.程序

# //定义一个结构体
# @ typedef struct testmu{
# @ LPCSTR name;
# @ }Mytestmu;

类 启动类 <公开 基础类 = 程序类>
{
    方法 启动方法 <公开 类型 = 整数>
    {
      // 在此处填入自己的代码
      变量 局部变量 <类型 = 文本数组类>
      局部变量.加入成员 ("成员1")
      局部变量.加入成员 ("成员2")
      局部变量.加入成员 ("成员3")

      方法_处理首页 (局部变量)


      返回 (1)
    }

    方法 方法_处理首页
    参数 参数名称 <类型 = 文本数组类>
    {

      @ Mytestmu wenben ;

      参数名称.枚举循环 ()
      {
            变量 jb_临时文本 <类型 = 文本型>
            变量 jb_索引 <类型 = 整数>
            jb_临时文本 = 参数名称.取枚举值 ()
            jb_索引 = 参数名称.取枚举索引 ()

            @ wenben[@<jb_索引>].name =(LPCSTR) GetMbsText (@<jb_临时文本>.GetText (), CVolMem (), NULL) ;

            // @ wenben[@<jb_索引>].name =GetMbsText (@<jb_临时文本>.GetText (), CVolMem (), NULL) ;

            // @ wenben[@<jb_索引>].name =(LPCSTR) @<jb_临时文本>.GetText () ;

            // @ wenben[@<jb_索引>].name =@<jb_临时文本>.GetText () ;

            // 上面的方式赋值,到下面还原出来都是乱码。

      }


      //【只有这里手动赋值才能还原出原始文本】
      // @ wenben.name = "111" ;
      // @ wenben.name = "222" ;
      // @ wenben.name = "333" ;


      计次循环 (3)
      {
            变量 jb_临时文本 <类型 = 文本型>
            变量 jb_索引 <类型 = 整数>

            jb_索引 = 取循环索引 ()

            @ @<jb_临时文本> = CVolString (GetWideText (wenben[@<jb_索引>].name, CVolMem (), NULL));

            可跳转调试输出 (jb_临时文本)


      }

    }


}

aixunsoft 发表于 2026-6-12 23:32:23

本帖最后由 aixunsoft 于 2026-6-13 01:10 编辑

建议用字节集数组,先转多字节保存起来,你那样直接转,转完执行到下一行就释放掉了

Xelloss0618 发表于 2026-6-13 00:12:13

LPCSTR 本身不存储文本数据,所以你要注意字节集的变量不能提前被释放。

你中间的代码可以改成这样
<火山程序 类型 = "通常" 版本 = 1 />

方法 方法_处理首页
参数 参数名称 <类型 = 文本数组类>
{
    @ Mytestmu wenben;
    @ CVolMem data;
    @ for (int i = 0; i < @<参数名称>.data().GetCount(); i++ )
    @ {
    @   wenben.name = GetMbsText(@<参数名称>.data().GetAt(i), data, NULL);
    @ }
}
页: [1]
查看完整版本: 【求助】火山文本转LPCSTR应该怎么做?