递归火山软件开发平台
标题:
视窗平台dll 返回文本问题
[打印本页]
作者:
luminous夜光
时间:
2023-9-1 17:31
标题:
视窗平台dll 返回文本问题
视窗平台dll 目前有什么好办法向外传递文本字符串吗,需要C++调用dll,有无demo可以看看
作者:
urenai
时间:
2023-9-1 17:45
getclassname api
总的来讲就是,申请内存,传入指针,内部写入数据后返回。
外部操作这个指针得到数据,然后 释放。
作者:
创世魂
时间:
2023-9-1 20:03
通过指针传递。。变整数
作者:
luminous夜光
时间:
2023-9-1 20:56
创世魂 发表于 2023-9-1 20:03
通过指针传递。。变整数
请问下有示例dmeo吗,不是很清楚指针怎么用
作者:
Xelloss0618
时间:
2023-9-1 21:56
<火山程序 类型 = "通常" 版本 = 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); // 第二次获取文本数据
作者:
hmyroot
时间:
2023-9-2 10:02
火山的文本类型不好用,不如易语言
作者:
luminous夜光
时间:
2023-9-3 00:23
Xelloss0618 发表于 2023-9-1 21:56
# 方法一
方法 返回文本1
感谢,我试一试
欢迎光临 递归火山软件开发平台 (https://bbs.voldp.com/)
Powered by Discuz! X3.4