線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:3087
推到 Plurk!
推到 Facebook!

VB中的Byval,ByRef在Delphi應該如何對應呢?

尚未結案
vagrant
一般會員


發表:29
回覆:72
積分:20
註冊:2003-07-04

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-07-07 14:58:10 IP:221.4.xxx.xxx 未訂閱
ByVal應該比較簡單, 但ByRef在Delphi應該如何應該吶?
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-07-07 15:29:33 IP:210.65.xxx.xxx 未訂閱
Hi vagrant,    
procedure TForm1.Button1Click(Sender: TObject);
  procedure test(x: Integer ; var y : integer); // x:Byval Y:ByRef
  begin
    x := 200;
    y := 200;
  end;
var
  x,y : integer;
begin
  x := 100;
  y := 100;
  ShowMessage('x=' IntToStr(x) '   '   'y=' IntToStr(y));
  test(x,y);
  ShowMessage('x=' IntToStr(x) '   '   'y=' IntToStr(y));
end
---------------------------------- 小弟才疏學淺,若有謬誤尚請不吝指教 ----------------------------------
------
Fishman
jeff377
初階會員


發表:9
回覆:60
積分:33
註冊:2004-08-10

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-07-10 09:27:27 IP:211.75.xxx.xxx 未訂閱
在VB中,ByVal指的是「傳值呼叫」,而ByRef指的是「傳址呼叫」。 在Delphi中若參數不特別指定,都是傳值呼叫;茬在參數前加上「var」關鍵字,則表示傳址呼叫。
LexChou
一般會員


發表:1
回覆:2
積分:0
註冊:2005-07-12

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-07-12 23:23:14 IP:61.183.xxx.xxx 未訂閱
补充楼上, 在VB中,默认参数传递是传址呼入,加上ByVal就是传值呼入,这点与Delphi有点不同 The fullmoon was calling, thou could not sleep Nor find peace in thy grave, thy keep
------
The fullmoon was calling, thou could not sleep Nor find peace in thy grave, thy keep
bill534
一般會員


發表:38
回覆:51
積分:17
註冊:2007-02-22

發送簡訊給我
#5 引用回覆 回覆 發表時間:2010-01-01 09:20:01 IP:114.41.xxx.xxx 訂閱
Dear

ByRef SendData As Any 對應至Delphi有人使用過嗎!我用Pointer時陣列型參數OK,但單一的double,long等變數就沒用(回傳正常,但控制器沒有動作)?

Function sssIoControl(ByVal hDev As Long, ByVal IoCtlCode As Long, ByRef SendData As Any, ByVal SendDataNum As Long, ByRef ReceiveData As Any, ByVal ReceiveDataNum As Long) As Long

下列是原廠.bas檔,ByRef SendData As Any會代各種類型的變數,delphi 使用時需如何做
public Function sssSetServoStatus(ByVal hDev As Long, ByVal axisNumber As Long, ByVal state As Long) As Long
Dim tempInt(1) As Integer
tempInt(0) = axisNumber
tempInt(1) = state

sssSetServoStatus = sssIoControl(hDev, IOCTL_SSSNC_INTERRUPT_CONTROL_CODE, tempInt(0), 2 * Len(tempInt(0)), vbNull, 0)
End Function

Public Function sssSetNcMode(ByVal hDev As Long, ByVal nMode As Long)
If (nMode < SSS_OPMODE_IDLE Or nMode >= SSS_OPMODE_LAST) Then
sssSetNcMode = SSS_ERROR
Exit Function
Else
sssSetNcMode = sssIoControl(hDev, IOCTL_SSSNC_SET_NC_MODE, nMode, Len(nMode), vbNull, 0)
End If
End Function
bill534
一般會員


發表:38
回覆:51
積分:17
註冊:2007-02-22

發送簡訊給我
#6 引用回覆 回覆 發表時間:2010-01-07 10:49:29 IP:125.230.xxx.xxx 訂閱
Dear

VB
Function sssIoControl(ByVal hDev As Long, ByVal IoCtlCode As Long, ByRef SendData As Any, ByVal SendDataNum As Long, ByRef ReceiveData As Any, ByVal ReceiveDataNum As Long) As Long
DELPHI
Function sssIoControl(hDev:integer,IoCtlCode:integer,Var SendData,SendDataNum:integer,Var ReceiveData,ReceiveDataNum:inetger):integer

傳入 Record或Array 等類型時,程式可正常作業 , 但傳入 integer,double 等類型時 , 回傳OK , 但動作似乎没有反應 ! .....
系統時間:2017-10-21 16:36:54
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!