libo1220 发表于 2014-11-18 14:28:33

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

其中函数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")      ;第四个参数
DllStructSetData($stString,"var","")
local $len=1

struct ptr { char fname)
$s = DllStructCreate("ptr ppfname;ptr pfname;char fname")
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)
EndIf

libo1220 发表于 2014-11-18 14:29:09

自己顶一个!大家快来人呀。。。。{:face (229):}

libo1220 发表于 2014-11-18 14:33:43

感觉问题主要出在传入char**类型参数那,也就是DllStructGetData($s,1) 这里,这个获取char**类型参数的方法我是参照之前论文有的那个方法,实在不知道怎么改动,有大神能帮下忙吗?

libo1220 发表于 2014-11-18 15:51:52

虚心求教,有人来吗?

libo1220 发表于 2014-11-18 18:02:13

{:face (229):}

netegg 发表于 2014-11-18 23:31:38

char*类型是数组格式或者是结构

libo1220 发表于 2014-11-19 08:25:49

回复 6# netegg

那char**呢?

netegg 发表于 2014-11-19 08:48:59

二维数组。。

libo1220 发表于 2014-11-19 09:22:25

回复 8# netegg

额。。。我知道这个。。就是不知道怎么传入吧一个char**类型的数据传入到DllCall这个函数里面去。。。能帮忙解答下吗

netegg 发表于 2014-11-19 11:56:29

定义个结构,传结构进去

wangms 发表于 2014-11-20 15:39:17

前来学习、、、、、、、、、、、、、

libo1220 发表于 2014-11-20 15:42:41

最终自己发现,在dll方法中的传char*型参数的函数可以很简单被autoit的dllcall方法调用,char**型的数据不行

20141213 发表于 2014-12-14 17:52:24

前来学习、、、、、、、、、、、、、

netegg 发表于 2014-12-27 10:43:47

char**s3;

s3 s3等都是char**

*s3 *s3等都是char*,是s3,s3这些char**指针指向的那个char*指针

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

s3是char***,等同于&s3
页: [1]
查看完整版本: 调dll文件中的自定义函数(有传入char**类型的数据)的问题