qzuser123ss 发表于 2024-5-11 05:06:33

静态变量和乱码的问题

准备用火山写一个加密的dll给易语言调用,易语言传入原始文本,火山加密后返回给易语言,使用环境为多线程环境。

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

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

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


363832663 发表于 2024-5-11 06:50:50

由易语言传递一个缓冲区,然后火山的dll把数据写入缓冲区


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

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


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



363832663 发表于 2024-5-11 06:56:21

363832663 发表于 2024-5-11 06:50
由易语言传递一个缓冲区,然后火山的dll把数据写入缓冲区




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

页: [1]
查看完整版本: 静态变量和乱码的问题