找回密码  加入

QQ登录

只需一步,快速开始

AUTOIT CN

搜索
查看: 5703|回复: 13

[AU3基础] 调dll文件中的自定义函数(有传入char**类型的数据)的问题

[复制链接]
发表于 2014-11-18 14:28:33 | 显示全部楼层 |阅读模式
其中函数SendData的格式如下:

SendData(sUserid,sPasswd,sSvccode,sMsg:PChar;var sRef:PPChar;var sLen:PLongInt):Integer;

输入的4个参数sUserid、sPasswd、sSvccode、sMsg:PChar 类型分别为string ,string,string,char*
在输入参数中返回参数sRef:PPChar、sLen:PLongInt类型为char**和long int类型

函数的返回类型是整型int
执行之后一直报错: exit code:3221225477

在线等求大神帮忙....................................................................................
下面附上代码:

local $user="username"   ;第一个参数
local $password="passwordnumber"   ;第二个参数
local $code="Trade_001"   ;第三个参数
local $inparam="hehe"
$arraydata=StringSplit($inparam,"")
Local $stString = DllStructCreate("char var[128]")      ;第四个参数
DllStructSetData($stString,"var","")
local $len=1

struct ptr { char fname[200])
$s = DllStructCreate("ptr ppfname;ptr pfname;char fname[200]")
DllStructSetData($s, 3, $arraydata)  ;给第3项赋值
$p1 = DllStructGetPtr($s, 3) ;  p1 = address of fname   (char*)
DllStructSetData($s, 2, $p1) ;  set "address of fname" to pfname (char**)
$p2 = DllStructGetPtr($s, 2)
DllStructSetData($s, 1, $p2)
$p3 = DllStructGetPtr($s, 1)

local $result = DllCall("KSBClient.dll","int","SendData","str",$user,"str",$password,"str",$code,"ptr",DllStructGetData($stString,1),"ptr",DllStructGetData($s,1),"int64",$len)

#region 释放结构的资源
$stString = 0
$s = 0
#EndRegion

If @error = 0 Then
   MsgBox("","","In")
   MsgBox("", "Ok", $result[0])
EndIf
 楼主| 发表于 2014-11-18 14:29:09 | 显示全部楼层
自己顶一个!大家快来人呀。。。。
 楼主| 发表于 2014-11-18 14:33:43 | 显示全部楼层
感觉问题主要出在传入char**类型参数那,也就是DllStructGetData($s,1) 这里,这个获取char**类型参数的方法我是参照之前论文有的那个方法,实在不知道怎么改动,有大神能帮下忙吗?
 楼主| 发表于 2014-11-18 15:51:52 | 显示全部楼层
虚心求教,有人来吗?
 楼主| 发表于 2014-11-18 18:02:13 | 显示全部楼层
发表于 2014-11-18 23:31:38 | 显示全部楼层
char*类型是数组格式或者是结构
 楼主| 发表于 2014-11-19 08:25:49 | 显示全部楼层
回复 6# netegg

那char**呢?
发表于 2014-11-19 08:48:59 | 显示全部楼层
二维数组。。
 楼主| 发表于 2014-11-19 09:22:25 | 显示全部楼层
回复 8# netegg

额。。。我知道这个。。就是不知道怎么传入吧一个char**类型的数据传入到DllCall这个函数里面去。。。能帮忙解答下吗
发表于 2014-11-19 11:56:29 | 显示全部楼层
定义个结构,传结构进去
发表于 2014-11-20 15:39:17 | 显示全部楼层
前来学习、、、、、、、、、、、、、
 楼主| 发表于 2014-11-20 15:42:41 | 显示全部楼层
最终自己发现,在dll方法中的传char*型参数的函数可以很简单被autoit的dllcall方法调用,char**型的数据不行
发表于 2014-12-14 17:52:24 | 显示全部楼层
前来学习、、、、、、、、、、、、、
发表于 2014-12-27 10:43:47 | 显示全部楼层
char**s3[10];

s3[0] s3[1]等都是char**

*s3[0] *s3[1]等都是char*,是s3[0],s3[1]这些char**指针指向的那个char*指针

**s3[0] **s3[1]等都是char,是*s3[0] *s3[1]这些char*指针指向的字符串的第一个字符

s3是char***,等同于&s3[0]
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|小黑屋|手机版|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2019-11-20 15:34 , Processed in 0.078124 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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