如何在delphi中使用指针传递参数(50分)

  • 主题发起人 主题发起人 charles2002
  • 开始时间 开始时间
C

charles2002

Unregistered / Unconfirmed
GUEST, unregistred user!
在程序中有两个类型指针 PForm = ^TMagnetismForm
PRect = ^TRect

另外有一函数AttachToForm,想在内对TMagnetismForm及TRect的成员进行赋值,
应如何操作
我使用语句
function AttachToForm(PForm:^TMagnetismForm
PRect:^TRect): Boolean;
报错了。请各位不吝赐教。谢了
 
type
pTMagnetismForm:^TMagnetismForm;
pTRect:^TRect;
......
function AttachToForm(AForm:pTMagnetismForm
ARect:pTRect): Boolean;
 
你得另声明一种指针类型,这一点DELPHI比较严格。或者你传个POINTER进去然后强制转换类型
使用它。 给你个方法:
type
Tpform=^Tform;
TpRect=^Trect;
{$R *.DFM}

function AttachToForm(PForm : TpForm
PRect: TpRect ): Boolean;
begin
//这里随便了。^_^
end;

还有,我从你得代码里拷贝得,你得那个^号怎么是全角啊?
你为什么不试试用传递var类型得参数来解决问题呢? 方便又易于理解。
 
在Delphi中传递可变参数根本不用像C那样传指针,只要加一个Var就可以了,如:
function AttachToForm(var AForm:TMagnetismForm
var PRect:TRect): Boolean;
——就是这么简单!

另:Delphi中的对象变量实际上都是指针(Delphi不会像C++那样傻呵呵的在调用函数时
重新生成一个TMagnetismForm对象),在上面的例子中,如果你只改变AForm的属性,而不是
AForm这个指针本身,完全可以直接用 AttachToForm(AForm:TMagnetismForm;....
试一下就知道了。
 
to shangshang:
使用传递var类型的作用是否和传递指针一样,两者有什么不同?另外有个问题请再请教
我使用function AttachToForm(var AForm: TMagnetism
var ARect:TRect): Boolean
这个function是在TMagnetism窗体中的,而参数传递的也正是TMagnetism创建的对象
这样行吗?好象和C++的有矛盾呀

 
传VAR类型和我们C概念里的传指针,也就是变参传递可以认为是一样的。
c++里只所以传指针,因为它有拷贝构造一说,而DELPHI跟本不管这个。
你即使直接写function AttachToForm(var AForm:TMagnetismForm
var PRect:TRect): Boolean;
效果是和function AttachToForm(AForm:TMagnetismForm;var PRect:TRect): Boolean;一样的。
在DELPHI里需要创建才能使用的类型,在作为参数传递时,不像C++一样创建并拷贝给局部参数。
它传的就是指针。(你试试就能理解)对于基本数据类型,或者是不需创建即可使用的类型。
在传递时则是常参传递,要想传变参,只能使用他们的指针,或加VAR.
我的理解,如果需要的话,就加VAR,不管什么类型,总是变参传递的。这样用最简单。
否则统统加上CONST;

第二个问题,你说的不是很清楚,不过我说一点,如果在FUNCTION使用对象的时候,他确定
已经创建了,那程序就可以正常运行。

井蛙之见,不当之处,还请诸位高手斧正。
 
borland工程师的目的就是让我们尽量远离api,message,callback,pointer令人头疼的东西。
呵呵,其实上面几位说的都不错的。
 
多人接受答案了。
 
后退
顶部