塞内加尔 发表于 2024-4-7 21:07 你这里有两个问题:1,文本测试里面的out实际上是一个新的局部变量,所以不会赋值给文本指针;2,temp变量的生存周期就是在运行文本测试这个方法时才创建,方法运行完成后,temp变量会自动销毁,所以就算返回的是temp文本的指针,也读取不到正确的值 我自己使用的方法是建一个全局变量,使其生命周期在程序运行到结束,然后读取该全局变量的指针就行了 |
塞内加尔 发表于 2024-4-7 22:08 X大不是白叫的 |
Xelloss0618 发表于 2024-4-7 22:00 感谢大神,注释详细到位,我都试试 感谢高手们的悉心指导 小弟受益匪浅 |
793359277 发表于 2024-4-7 21:47 感谢大神,又学了一招 ![]() |
应该参考API的写法,由调用方申请内存,返回局部静态变量的地址不能线程安全。 <火山程序 类型 = "通常" 版本 = 1 /> 方法 返回文本 <公开 静态 类型 = 整数 注释 = "线程安全" 返回值注释 = "成功返回文本长度,失败返回-1"> 参数 文本指针 <类型 = 变整数 注释 = "wchar_t* 传0表示只返回文本长度"> 参数 长度 <类型 = 整数 注释 = "int 单位为宽字符数量,应包含结尾零字符."> { 变量 文本内容 <类型 = 文本型 值 = "返回文本"> 变量 内容长度 <类型 = 整数> 内容长度 = 取文本长度 (文本内容) 如果 (文本指针 == 0) // 只获取文本长度 { 返回 (内容长度) } 如果 (内容长度 > 长度) // 缓冲区不足,返回-1表示失败 { 返回 (-1) } 内存复制 (文本指针, 取文本指针 (文本内容), (内容长度 + 1) * 2) 返回 (内容长度) } 方法 例子 { 变量 缓冲区 <类型 = 字节集类> 变量 长度 <类型 = 整数> 长度 = 返回文本 (0, 0) 缓冲区.分配字节集 ((长度 + 1) * 2) // 一个宽字符等于2字节,加上结尾零字符 返回文本 (缓冲区.取字节集指针 (), 缓冲区.取字节集长度 ())= 调试输出 (字节集到文本 (缓冲区)) } |
塞内加尔 发表于 2024-4-7 21:41 取变量地址的话 应该是这样的 ![]() |
793359277 发表于 2024-4-7 21:32 写DLL不能用C++的参数引用传递(即你这个后缀文本),应该改用指针。 |
793359277 发表于 2024-4-7 21:32 感谢大神,就是这个意思 还得多向大神们请教啊 |
要考虑变量的生存周期啊 |
|Archiver|手机版|小黑屋|递归火山软件开发平台
( 鄂ICP备18029190号 )
GMT+8, 2025-5-1 02:22 , Processed in 0.103551 second(s), 28 queries .
Powered by Discuz! X3.4
© 2001-2017 Comsenz Inc.