递归火山软件开发平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 火山 源码 类库
查看: 2996|回复: 6
打印 上一主题 下一主题

[视窗] 视窗平台dll 返回文本问题

[复制链接]

1

主题

3

帖子

19

积分

新手上路

Rank: 1

积分
19
跳转到指定楼层
楼主
发表于 2023-9-1 17:31:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
视窗平台dll 目前有什么好办法向外传递文本字符串吗,需要C++调用dll,有无demo可以看看
回复

使用道具 举报

346

主题

1600

帖子

6537

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
6537
QQ
沙发
发表于 2023-9-1 17:45:01 | 只看该作者
getclassname api


总的来讲就是,申请内存,传入指针,内部写入数据后返回。
外部操作这个指针得到数据,然后 释放。
专业承接18-98岁xx的心理及生理教育辅导。
回复

使用道具 举报

444

主题

1万

帖子

4万

积分

超级版主

Rank: 8Rank: 8

积分
40533
板凳
发表于 2023-9-1 20:03:59 | 只看该作者
通过指针传递。。变整数
安卓无障碍实战课:点击查看
交流群:641526939
回复

使用道具 举报

1

主题

3

帖子

19

积分

新手上路

Rank: 1

积分
19
地板
 楼主| 发表于 2023-9-1 20:56:53 | 只看该作者
创世魂 发表于 2023-9-1 20:03
通过指针传递。。变整数

请问下有示例dmeo吗,不是很清楚指针怎么用
回复

使用道具 举报

26

主题

1900

帖子

6926

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
6926
5#
发表于 2023-9-1 21:56:43 来自手机 | 只看该作者
<火山程序 类型 = "通常" 版本 = 1 />

# 方法一

方法 返回文本1 <公开 静态 类型 = 变整数 注释 = "返回局部静态变量的文本指针" 注释 = "优点: 简单易用"
        注释 = "缺点: 第二次调用方法,之前返回的文本指针就会失效,因此必须马上复制返回的文本数据;" 注释 = "非线程安全" 返回值注释 = "C++类型 const wchar_t*" 折叠
        @输出名 = "GetStr1" @视窗.输出 = 真>
参数 参数 <类型 = 整数>
{
    变量 文本内容 <静态 类型 = 文本型 注释 = "必须静态">
    文本内容 = "返回的文本" + 到文本 (参数)
    返回 (取文本指针 (文本内容))
}

# C++调用方法:
#     std::wstring wstr = GetStr1(123); // 这样赋值,文本指针的数据就会复制到 std::wstring 中
# ----
# 方法二

方法 返回文本2 <公开 静态 类型 = 变整数 注释 = "DLL方申请内存,并返回文本指针" 注释 = "优点: 简单易用,线程安全" 注释 = "缺点: 需要多调用一条命令释放文本数据"
        返回值注释 = "C++类型 const wchar_t*" 折叠 @输出名 = "GetStr2" @视窗.输出 = 真>
参数 参数 <类型 = 整数>
{
    变量 文本内容 <类型 = 文本型>
    变量 文本指针 <类型 = 变整数>
    变量 数据大小 <类型 = 整数>
    文本内容 = "返回的文本" + 到文本 (参数)
    数据大小 = (取文本长度 (文本内容) + 1) * 2  // 文本数据占用的内存大小为 (文本字符数 + 1) * 2
    文本指针 = 分配内存 (数据大小)
    内存复制 (文本指针, 取文本指针 (文本内容), 数据大小)
    返回 (文本指针)
}

方法 释放文本 <公开 静态 注释 = "释放\"返回文本2\"返回的文本数据" 返回值注释 = "C++类型 const wchar_t*" 折叠 @输出名 = "FreeStr" @视窗.输出 = 真>
参数 文本指针 <类型 = 变整数 注释 = "必须是\"DLL返回文本\"返回的文本指针">
{
    释放内存 (文本指针)
}

# C++调用方法:
#     const wchar_t* pdata = GetStr2(123);
#     std::wstring wstr = pdata;
#     FreeStr(pdata);
# ----
# 方法三

方法 返回文本3 <公开 静态 注释 = "调用方申请内存" 注释 = "优点: 安全,这是DLL的标准写法" 注释 = "缺点: 用法比较复杂" 折叠 @输出名 = "GetStr3"
        @视窗.输出 = 真>
参数 参数 <类型 = 整数>
参数 文本指针 <类型 = 变整数 注释 = "wchar_t* 传0表示只返回文本长度">
参数 长度指针 <类型 = 变整数 注释 = "int* 单位为宽字符数量">
{
    变量 文本内容 <类型 = 文本型>
    文本内容 = "返回的文本" + 到文本 (参数)
    如果 (文本指针 == 0 || 读指针处值 (长度指针, 整数) < 取文本长度 (文本内容))
    {
        写指针处值 (长度指针, (整数)取文本长度 (文本内容))
        返回
    }
    写指针处值 (长度指针, (整数)取文本长度 (文本内容))
    内存复制 (文本指针, 取文本指针 (文本内容), (取文本长度 (文本内容) + 1) * 2)
}

# C++调用方法1:
#     int len = 0;
#     GetStr3(123, nullptr, &len); // 第一次取文本长度
#     wchar_t* pstr = new wchar_t[len + 1];
#     GetStr3(123, pstr, &len); // 第二次获取文本数据
#     ...
#     delete pstr; // 使用后需要手动释放
# C++调用方法2:
#     std::wstring wstr;
#     int len = 0;
#     GetStr3(123, nullptr, &len); // 第一次取文本长度
#     wstr.resize(len);
#     GetStr3(123, wstr.data(), &len); // 第二次获取文本数据
回复

使用道具 举报

12

主题

468

帖子

1396

积分

金牌会员

Rank: 6Rank: 6

积分
1396
6#
发表于 2023-9-2 10:02:57 来自手机 | 只看该作者
火山的文本类型不好用,不如易语言
回复

使用道具 举报

1

主题

3

帖子

19

积分

新手上路

Rank: 1

积分
19
7#
 楼主| 发表于 2023-9-3 00:23:39 | 只看该作者
Xelloss0618 发表于 2023-9-1 21:56
# 方法一

方法 返回文本1

感谢,我试一试
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|递归火山软件开发平台 ( 鄂ICP备18029190号 )

GMT+8, 2024-11-24 11:57 , Processed in 0.099671 second(s), 24 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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