动态链接库问题
这个指针为什么返回到参数 就销毁了 怎么保留返回到参数返回值是可以的真费劲 没人吗 用读指针处对象,再加入文本 常识啊。
一、你的指针指向的对象是局部数据,执行完那一行就会被销毁;
二、DLL 返回参数需要用指针;
你的写法要参考系统API,主要是两个方式。
A:调用前申请内存,将指针传给 DLL,DLL 将数据复制到指针中;
B:DLL 申请内存,写入数据后返回指针,DLL 还需要另外写一个方法来释放指针;
还有其他小问题,这种场景,文本到多字节第二个参数应该用真,不过也能跑。 用文本型 也不行 我是易调用火山DLL火山返回有数据 易返回空 其他函数正常 DLL用文本型,火山内部是直接转换成文本指针的,所以也不能拿来返回东西
<火山程序 类型 = "通常" 版本 = 1 />
方法 验证1 <公开 静态 类型 = 整数 折叠 @输出名 = "Software" @视窗.输出 = 真>
参数 云版本 <类型 = 变整数 注释 = "传变整数变量地址">
{
如果 (云版本 == 0)// 空指针
{
返回 (0)
}
变量 _云版本 <类型 = 字节集类>
变量 _地址 <类型 = 变整数>
_云版本 = 文本到多字节 ("1.2.3")
_地址 = 分配内存 (_云版本.取字节集长度 ())
内存复制 (_地址, _云版本.取字节集指针 (), _云版本.取字节集长度 ())
写指针处值 (云版本, _地址)
返回 (1)
}
方法 释放1 <公开 静态 折叠 @输出名 = "FreeStr" @视窗.输出 = 真>
参数 文本地址 <类型 = 变整数>
{
如果 (文本地址 != 0)
{
释放内存 (文本地址)
}
}
方法 验证2 <公开 静态 类型 = 整数 折叠 @输出名 = "Software2" @视窗.输出 = 真>
参数 云版本 <类型 = 变整数 注释 = "传文本指针">
{
如果 (云版本 == 0)// 空指针
{
返回 (0)
}
变量 _云版本 <类型 = 字节集类>
_云版本 = 文本到多字节 ("1.2.3")
内存复制 (云版本, _云版本.取字节集指针 (), _云版本.取字节集长度 ())
返回 (1)
}
方法 调用例子 <公开 注释 = "火山例子,易语言也差不多" 折叠>
{
变量 文本地址 <类型 = 变整数>
变量 云版本 <类型 = 文本型>
// 方案1
验证1 (取变量地址 (文本地址))
云版本 = 多字节指针到文本 (文本地址)
释放1 (文本地址)// 用完释放
调试输出 (云版本)
// 方案2
文本地址 = 分配内存 (1024)// 要预分配足够的内存
验证2 (文本地址)
云版本 = 多字节指针到文本 (文本地址)
释放内存 (文本地址)
调试输出 (云版本)
// 两个方案的区别就是谁申请内存谁释放,EXE端申请内存要先确定大小
}
页:
[1]