递归火山软件开发平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[视窗] 静态变量和乱码的问题

[复制链接]

4

主题

17

帖子

73

积分

注册会员

Rank: 2

积分
73
跳转到指定楼层
楼主
发表于 2024-5-11 05:06:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
准备用火山写一个加密的dll给易语言调用,易语言传入原始文本,火山加密后返回给易语言,使用环境为多线程环境。

下面是火山的dll代码,我尝试过使用全局静态变量和局部静态变量,发现在易语言多线程环境下都有概率发生返回上一次数据的问题,比如现在同时启用50个线程,每个线程执行10次循环来调用这个火山dll,大概率会触发上面讲到的问题。如果去掉了静态且改为局部变量后,大概率会出现一些乱码。现在上述两个问题不知道有没有大佬指点下是哪里的问题。
  1. <火山程序 类型 = "通常" 版本 = 1 />

  2. 方法 内部_转码 <公开 静态 类型 = 变整数 注释 = "一个输出方法模板" @输出名 = "decode" @视窗.输出 = 真>
  3. 参数 参_原始文本 <类型 = 文本型 "">
  4. {
  5.     // 请在其中填入自己的方法内容
  6.     变量 字节集 <类型 = 字节集类>

  7.     字节集 = 文本到多字节 (参_原始文本, 假)
  8.     返回 (字节集.取字节集指针 ())
  9.     // 返回 (文本到多字节 ("hello 火山编程 " + 指针到文本 (参_原始文本), 假).取字节集指针 ())
  10. }
复制代码


回复

使用道具 举报

2

主题

51

帖子

789

积分

高级会员

Rank: 4

积分
789
沙发
发表于 2024-5-11 06:50:50 | 只看该作者
由易语言传递一个缓冲区,然后火山的dll把数据写入缓冲区


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

方法 内部_转码 <公开 静态 类型 = 变整数 注释 = "一个输出方法模板" 折叠 @输出名 = "decode" @视窗.输出 = 真>
参数 参_原始文本 <类型 = 文本型 "">
参数 参_缓冲区 <类型 = 整数 注释 = "易语言取空白字节集,传取变量数据地址指针,需要确保申请的字节集足够大不会越界">
参数 参_缓冲区返回长度 <类型 = 整数 注释 = "取变量数据地址(整数变量)">
{
    变量 字节集 <类型 = 字节集类>
    字节集 = 文本到多字节 (参_原始文本, 假)
    内存复制 (参_缓冲区, 字节集.取字节集指针 (), 字节集.取字节集长度 ())
    内存复制 (参_缓冲区返回长度, 字节集.取字节集长度 (), 4)


    // 返回 (字节集.取字节集指针 ())
    // 返回 (文本到多字节 ("hello 火山编程 " + 指针到文本 (参_原始文本), 假).取字节集指针 ())
}



回复

使用道具 举报

2

主题

51

帖子

789

积分

高级会员

Rank: 4

积分
789
板凳
发表于 2024-5-11 06:56:21 | 只看该作者
363832663 发表于 2024-5-11 06:50
由易语言传递一个缓冲区,然后火山的dll把数据写入缓冲区

内存复制 (参_缓冲区返回长度, 字节集.取字节集长度 (), 4) 改成 写指针处值 (参_缓冲区返回长度, 字节集.取字节集长度 ())

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-3 16:30 , Processed in 0.081709 second(s), 17 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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