有关Dll参数调用(100分)

  • 主题发起人 主题发起人 AndyCai
  • 开始时间 开始时间
A

AndyCai

Unregistered / Unconfirmed
GUEST, unregistred user!
我在delphi的使用中遇到一个问题,向大家求教。<br><br>大家知道在动态调有dll中的函数的时候,调用程序可以从定义于dll中的函数得到一个返回值。<br>但现在我需要2个以上的返回值,想用参数传递的方法。但dll中定义的变量是不能被调用程序使用的。<br>听说可以用参数传递的方式使调用程序得到dll中定义的变量,但我不知道在dll中<br>怎样定义参数。望各位大虾帮助。<br>
 
在库单元的interface部分加入变量声明如<br>var a,b:integer;<br>然后声明并导出一个函数<br>procedure get(var i,j:integer);stdcall;<br>begin<br>i:=a;<br>j:=b;<br>end;<br>这样在主程序中就可以调用它得到变量的值了。<br>这只是个大概吧!
 
关键是函数声明时参数前的var修饰符,他告诉编译器这个参数是址传递,也就是说可返回值.
 
你把问题说清楚!!!我好帮你!!!我不清楚你的问题到底处在哪???
 
windbell的方法完全正确!
 
参数前的var修饰符?????????????????<br>
 
非常感谢大家帮忙,但可能是我没把问题说清楚的原因,大家的对我的问题没帮助。<br>windbell 所说的方法意思是在dll中定义几个个全局变量,把全局变量的值赋给get函数中的变量<br>然后在主程序中调用它。但这样只能是从外部主函数中带参数调用dll中的函数,从而改变dll中的全局参数<br>而我要实现的功能是从dll内部给主程序中的调用函数2个以上的返回值(我现在只通过调用函数名返回一个函数值)[:(],是从内向外不是从外向内
 
AndyCai:<br>&gt;&gt;windbell 所说的方法意思是在dll中定义几个个全局变量,把全局变量的值赋给get函数中的变量<br>windbell说的可不是这个意思,你没理解啊<br>他说的意思是:在主程序中,var a,b:integer;然后,用a和b作为参数调用DLL中的函数,<br>get(a,b);<br>而在DLL中,函数的声明是下面这样的,<br>procedure get(var i,j:integer);stdcall;<br>begin<br>i:=a;<br>j:=b;<br>end;<br>============================================<br>这样解释,你明白了吗?<br><br>再说得详细一点,就是下面这样:<br>如果DLL中函数的参数或返回值是指针,那么一定要在概念上非常清晰明确。<br>总的来说,就是你要向人家传递指针,那么你就要分配内存,调用完毕后,你再释放内存;<br>反之,人家要向你返回指针,那么就是人家分配内存,使用完毕后,人家释放内存。如果<br>采用的是内存映射文件这样的共享内存,则使用完后,双方都可以释放。<br>那么,Delphi在函数声明中,应该用“var xxx: Txxx”的写法。<br><br>
 
声明为Var的变量,多少个都没问题的...
 
[:D] &nbsp;谢谢了 &nbsp;我的明白了<br><br>唉 用的时候才知道自己懂的少呀 &nbsp;<br><br>我的分还够提一个问题,不知道分用完了怎么办? [:(]
 
AndyCai:<br>你要进行账号确认,看这个帖子,http://www.delphibbs.com/delphibbs/dispq.asp?lid=665807<br>如果确认了,就会每天自动增加5分,慢慢就多了,可以提问了。<br>如果实在没分了,我给你,你给我写信,taibenle@163.com,我给你分。<br>大家互相帮助嘛![:D][:D]<br>交个朋友,握个手吧![:D]
 
小笨苯[:)] &nbsp;你真好<br><br>我刚参加工作 现在主要用delphi编程 在工作中遇到不少问题 &nbsp; 不过刚才的问题解决了 [:D][:D][:D]<br><br>呵呵 真的很感谢大富翁论坛提供这样一个场所
 
后退
顶部