南极磁场 發表於 2018-12-6 14:39:27

易语言字节集参数传递详解

<p><strong>易语言多线程之字节集参数传递</strong><br />
</p>
<p>传递文本可以直接传递文本的指针,但是字节集却不能这样,看下面直接传递字节集指针的代码:</p>
<div class="jb51code">
<pre class="brush:xhtml;">
.版本 2
.支持库 spec
.支持库 EThread

.程序集 窗口程序集1
.程序集变量 线程句柄, 整数型
.程序集变量 内存长度, 整数型

.子程序 _按钮1_被单击
.局部变量 data, 字节集
.局部变量 ptr, 整数型

data = { 1 }
内存长度 = 取字节集长度 (data)
ptr = 取变量数据地址 (data)

启动线程 (&amp;传递字节集参数, ptr, 线程句柄)
关闭线程句柄 (线程句柄)


.子程序 传递字节集参数
.参数 ptr, 整数型


调试输出 (指针到字节集 (ptr, 内存长度))</pre>
</div>
<p><img src="https://img.jbzj.com/file_images/article/201812/20181206143704.png" alt="" /></p>
<p>很明显结果是错误的,错误的原因涉及到程序的内存的划分,后面会详细讲解。<br />
</p>
<p>先看解决这个问题的代码:</p>
<div class="jb51code">
<pre class="brush:xhtml;">
.版本 2
.支持库 spec
.支持库 EThread

.程序集 窗口程序集1
.程序集变量 线程句柄, 整数型
.程序集变量 内存长度, 整数型

.子程序 _按钮1_被单击
.局部变量 data, 字节集
.局部变量 ptr, 整数型

data = { 1 }
内存长度 = 取字节集长度 (data)
ptr = 申请内存 (内存长度, 真)
写到内存 (data, ptr, 内存长度)

启动线程 (&amp;传递字节集参数, ptr, 线程句柄)
关闭线程句柄 (线程句柄)


.子程序 传递字节集参数
.参数 ptr, 整数型


调试输出 (指针到字节集 (ptr, 内存长度))
释放内存 (ptr)</pre>
</div>
<p>首先申请内存,然后把数据写入内存,把内存的指针传入线程。<br />
</p>
<p>运行结果:</p>
<p><img src="https://img.jbzj.com/file_images/article/201812/20181206143744.png" alt="" /></p>
<p>有时间再发一帖说下程序的内存划分,还有取变量地址和取变量数据地址的区别。</p>
                           
                            <div class="art_xg">
                              <b>您可能感兴趣的文章:</b><ul><li>易语言文本型和字节集型数据相互转换的工具</li><li>易语言dll文件传递字节集参数解析</li><li>详解易语言字节集动态加密</li><li>易语言从前或从后寻找指定字节集</li><li>易语言取字节集数据转换为指定类型的数据</li><li>易语言将指定数据类型转换为字节集类型</li><li>易语言取字节集长度,获取图片框中图片数据的大小</li><li>一步一步跟我学易语言之字节集</li></ul>
                            </div>

                        </div>
                        <!--endmain-->
頁: [1]
查看完整版本: 易语言字节集参数传递详解