递归火山软件开发平台

标题: 求大神们解惑??火山pc要如何往外传递文本指针?? [打印本页]

作者: 塞内加尔    时间: 2024-4-7 19:30
标题: 求大神们解惑??火山pc要如何往外传递文本指针??
(, 下载次数: 412)
比如,我想返回多个结果,而这里边有文本类的结果,要如何做,才能传递文本类的指针呢?
如果把指针类的参数改成文本,可以直接传出去,但就是想研究一下,如何往外传递文本的指针呢

作者: 塞内加尔    时间: 2024-4-7 19:31
希望大神们分享几个例程,感激不尽
作者: 呵呵仙8    时间: 2024-4-7 20:45
提示: 作者被禁止或删除 内容自动屏蔽
作者: 呵呵仙8    时间: 2024-4-7 20:54
提示: 作者被禁止或删除 内容自动屏蔽
作者: server    时间: 2024-4-7 21:06
  1. <火山程序 类型 = "通常" 版本 = 1 />

  2. 方法 test <公开>
  3. {
  4.     变量 返回文本 <类型 = 文本型>

  5.     传递文本指针 ("测试文本", 返回文本)  // 文本型 是个类,直接传参=参考。
  6.     调试输出 (返回文本)

  7. }

  8. 方法 传递文本指针 <公开 类型 = 整数>
  9. 参数 测试文本 <类型 = 文本型>
  10. 参数 out文本 <类型 = 文本型>
  11. {
  12.     变量 临时文本 <类型 = 文本型 值 = "临时文本">
  13.     out文本 = 临时文本 + "abc" + 测试文本
  14.     返回 (取文本长度 (out文本))
  15. }
复制代码

作者: 塞内加尔    时间: 2024-4-7 21:07
(, 下载次数: 354)
我是这个意思,比如上面的C++例子,在火山中,传址要如何去实现,我用取文本指针,取变量地址都没有实现,
下面的例子,肯定是写的不对,我的意思就是把方法中的文本结果,通过指针的方式能够传递到方法外部,可能我表达的不是太明确,
希望大神们能理解

(, 下载次数: 360)

作者: 793359277    时间: 2024-4-7 21:32
塞内加尔 发表于 2024-4-7 21:07
我是这个意思,比如上面的C++例子,在火山中,传址要如何去实现,我用取文本指针,取变量地址都没有实现,
下面 ...

你是这个意思?

(, 下载次数: 353)

作者: server    时间: 2024-4-7 21:35
操了,回个贴总是审查
作者: 小小小小鸟    时间: 2024-4-7 21:38
要考虑变量的生存周期啊
作者: 塞内加尔    时间: 2024-4-7 21:41
793359277 发表于 2024-4-7 21:32
你是这个意思?

感谢大神,就是这个意思

还得多向大神们请教啊

作者: Xelloss0618    时间: 2024-4-7 21:42
793359277 发表于 2024-4-7 21:32
你是这个意思?

写DLL不能用C++的参数引用传递(即你这个后缀文本),应该改用指针。
作者: 793359277    时间: 2024-4-7 21:47
塞内加尔 发表于 2024-4-7 21:41
感谢大神,就是这个意思

还得多向大神们请教啊

取变量地址的话 应该是这样的

(, 下载次数: 299)

作者: Xelloss0618    时间: 2024-4-7 22:00
应该参考API的写法,由调用方申请内存,返回局部静态变量的地址不能线程安全。

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

方法 返回文本 <公开 静态 类型 = 整数 注释 = "线程安全" 返回值注释 = "成功返回文本长度,失败返回-1">
参数 文本指针 <类型 = 变整数 注释 = "wchar_t* 传0表示只返回文本长度">
参数 长度 <类型 = 整数 注释 = "int 单位为宽字符数量,应包含结尾零字符.">
{
    变量 文本内容 <类型 = 文本型 值 = "返回文本">
    变量 内容长度 <类型 = 整数>
    内容长度 = 取文本长度 (文本内容)
    如果 (文本指针 == 0)  // 只获取文本长度
    {
        返回 (内容长度)
    }
    如果 (内容长度 > 长度)  // 缓冲区不足,返回-1表示失败
    {
        返回 (-1)
    }
    内存复制 (文本指针, 取文本指针 (文本内容), (内容长度 + 1) * 2)
    返回 (内容长度)
}

方法 例子
{
    变量 缓冲区 <类型 = 字节集类>
    变量 长度 <类型 = 整数>
    长度 = 返回文本 (0, 0)
    缓冲区.分配字节集 ((长度 + 1) * 2)  // 一个宽字符等于2字节,加上结尾零字符
    返回文本 (缓冲区.取字节集指针 (), 缓冲区.取字节集长度 ())=
    调试输出 (字节集到文本 (缓冲区))

}

作者: 塞内加尔    时间: 2024-4-7 22:04
793359277 发表于 2024-4-7 21:47
取变量地址的话 应该是这样的

感谢大神,又学了一招
作者: 塞内加尔    时间: 2024-4-7 22:08
Xelloss0618 发表于 2024-4-7 22:00
应该参考API的写法,由调用方申请内存,返回局部静态变量的地址不能线程安全。

感谢大神,注释详细到位,我都试试
感谢高手们的悉心指导
小弟受益匪浅
作者: 创世魂    时间: 2024-4-7 22:41
塞内加尔 发表于 2024-4-7 22:08
感谢大神,注释详细到位,我都试试
感谢高手们的悉心指导
小弟受益匪浅

X大不是白叫的
作者: vkcll    时间: 2024-4-12 15:25
塞内加尔 发表于 2024-4-7 21:07
我是这个意思,比如上面的C++例子,在火山中,传址要如何去实现,我用取文本指针,取变量地址都没有实现,
下面 ...

你这里有两个问题:1,文本测试里面的out实际上是一个新的局部变量,所以不会赋值给文本指针;2,temp变量的生存周期就是在运行文本测试这个方法时才创建,方法运行完成后,temp变量会自动销毁,所以就算返回的是temp文本的指针,也读取不到正确的值
我自己使用的方法是建一个全局变量,使其生命周期在程序运行到结束,然后读取该全局变量的指针就行了




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