调用dll中的参数类型问题,再现等待结果!急救(200分)

  • 主题发起人 主题发起人 zaiai2003
  • 开始时间 开始时间
Z

zaiai2003

Unregistered / Unconfirmed
GUEST, unregistred user!
最近使用一个dll读取硬件的信息,在调用dll中的函数是出现了问题,请帮助!<br>int SDT_ReadBaseMsg (<br>int iPort,<br>unsigned char * pucCHMsg,<br>unsigned int * puiCHMsgLen,<br>unsigned char * pucPHMsg,<br>unsigned int * puiPHMsgLen,<br>int iIfOpen<br>);<br>参数说明:<br>iPort<br>[in] 整数,表示端口号。参见SDT_ResetSAM。<br>pucCHMsg<br>[out] 无符号字符指针,指向读到的文字信息。<br>puiCHMsgLen<br>[out] 无符号整型数指针,指向读到的文字信息长度。<br>pucPHMsg<br>[out] 无符号字符指针,指向读到的照片信息。<br>puiPHMsgLen<br>[out] 无符号整型数指针,指向读到的照片信息长度。<br>iIfOpen [in] 整数。<br>现在的问题就是对于无符号字符指针,不知道在d中如何使用。我不太了解!现在的情况如下:<br>如果我将无符号字符指针,声明为<br>TIDTextInfo = array[0..1023] of WideChar; &nbsp;<br>就可以获得信息,但是和人家文档的情况不一致!非常迷茫?如果是Pchar不行啊!还有这个需要分配内存吗?<br><br><br>下面是我的声明部分:<br> &nbsp; &nbsp;function HS_SDT_ReadBaseMsg(iPort:integer;<br> &nbsp; &nbsp; &nbsp; &nbsp;var pucCHMsg:TIDTextInfo; &nbsp;var puiCHMsgLen:word;<br> &nbsp; &nbsp; &nbsp; &nbsp;var pucPHMsg:TIDTextInfo; var puiPHMsgLen:word;<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;iIfOpen:integer):integer stdcall;<br> &nbsp; implementation<br> &nbsp;function HS_SDT_ReadBaseMsg; external 'sdtapi.dll' name 'SDT_ReadBaseMsg';
 
就是用PChar,你用的不对,要自己先分配内存的
 
麻烦老兄了!<br>你否给一个例子!我自己也测试过,但是没有返回值!提携一下!
 
TIDTextInfo = array[0..1023] of PChar;
 
有例子最好!我已经被这个问题搞糊涂了![:(]
 
我再顶顶!
 
1.Dll和Exe调用接口的原则就是:自己申请的空间自己释放。你的这个接口定义并不存在空间问题,因此楼主所讲,绝对不需要申请空间。<br>2.TIDTextInfo = array[0..1023] of PChar; &nbsp;这种定义,在作为var 参数的时候,其实只是一个指针类型,因此并不存在空间申请问题。或者可以做一个更好的定义:<br>PIDTextInfo = ^TIDTextInfo;<br>function HS_SDT_ReadBaseMsg(iPort:integer;<br> &nbsp; &nbsp; &nbsp; &nbsp;pucCHMsg:PIDTextInfo; puiCHMsgLen:PWord;<br> &nbsp; &nbsp; &nbsp; &nbsp;pucPHMsg:PIDTextInfo; puiPHMsgLen:PWord;<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;iIfOpen:integer):integer stdcall;<br>因为原来Dll的接口都是传指针的。这样更纯粹。<br><br>我想楼主主要是不明白这中间的过程,或者感觉很模糊,所以不敢肯定自己的使用。<br>不知道我的解释能否对你有所帮助。<br><br>Good Luck
 
Pword?你的意思就是说在这里unsigned char*可以对应定义为:<br>PIDTextInfo = Pchar;<br>各位老兄:Pchar是不行啊?我都测试过了!是的有点儿迷茫!就像一个人,道里好像都动,其实什么都不懂?<br>自己申请的自己释放,那么我们传送的指针给dll,调用完毕以后,还要使用该指针所指的内容!dll都释放了,我们怎么使用呢?希望大家答疑解惑![:(]
 
上面是笔误,TIDTextInfo = array[0..1023] of WideChar; 不是PChar<br>空间当然是你申请的。<br>你申请的空间指针传递到Dll中进行处理,返回值就在里面。回来你直接用就可以了。<br><br>按照你原来的定义,其实就是申请好空间了啊。所以我说你申请空间没问题啊。
 
function HS_SDT_ReadBaseMsg(iPort:integer;<br> &nbsp; &nbsp; &nbsp; &nbsp;out pucCHMsg:PChar; &nbsp;out puiCHMsgLen:word;<br> &nbsp; &nbsp; &nbsp; &nbsp;out pucPHMsg:PChar; out puiPHMsgLen:word;<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;iIfOpen:integer):integer stdcall;
 
&gt;&gt;现在的问题就是对于无符号字符指针<br>Delphi的char就是无符号的
 
zqw0117,谢谢!<br>在调用时,不需要申请空间吧!我试验的时候,总是运行就出来调试的cpu界面啊!
 
帮楼主顶一把!!!听课....
 
问题自己解决,结贴了![:(]
 

Similar threads

后退
顶部