?? c980301.gb_
字號:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<TITLE>ActiveX篇: 哪一種參數傳遞的方式比較節省時間?</TITLE>
<META NAME="GENERATOR" CONTENT="Mozilla/3.01Gold (Win95; I) [Netscape]">
<META NAME="Author" CONTENT="KJ Wang">
</HEAD>
<BODY TEXT="#202020" BGCOLOR="#FFFFFF" LINK="#FF0000" VLINK="#000080" ALINK="#FF0000">
<H2 ALIGN=CENTER><A HREF="vbax.htm">VB5 與 ActiveX 程式設計</A></H2>
<H3 ALIGN=CENTER><A HREF="../vbweeks.htm">每周一問</A>: 挑戰您的 VB 功力 (初級篇, 98/03/01) </H3>
<H2>
<HR WIDTH="100%"></H2>
<TABLE WIDTH="100%" >
<TR VALIGN=TOP>
<TD NOWRAP>Q:</TD>
<TD>同樣的副程式, 只有參數的定義不相同, 問何者比較節省呼叫時間?
<TABLE BORDER=1 CELLSPACING=0 CELLPADDING=4 WIDTH="80%" >
<TR VALIGN=TOP>
<TD>Sub SubX( <FONT COLOR="#FF0000">ByVal S As String</FONT> )<BR>
...<BR>
End Sub</TD>
<TD>Sub SubX( <FONT COLOR="#FF0000">S As String</FONT> )<BR>
...<BR>
End Sub</TD>
</TR>
</TABLE>
<P>如果說副程式與呼叫程式位於同一個程式中, 則「S As String」的傳遞方式較快,
原因請參閱 <A HREF="../ba/A980208.htm">98/02/08 的每周一問</A>。但如果被呼叫的副程式位於
ActiveX code component 之中的, 而呼叫程式位於另一個獨立的程式, 結果又如何呢?</P>
</TD>
</TR>
<TR VALIGN=TOP>
<TD>A:</TD>
<TD>ActiveX code component 分成 ActiveX DLL 及 ActiveX EXE 兩種。
<P>對 ActiveX DLL 而言, 如果被程式 A 所引用, 則 ActiveX DLL 之中的變數將與程式
A 的變數使用相同的「定址空間」, 而「S As String」的傳「位址」工作模式在
ActiveX DLL 與應用程式之間并不會有任何問題。</P>
<P>但如果是 ActiveX EXE, 由於 ActiveX EXE 本身是獨立的執行檔, 所以與應用程式之間的「定址空間」是各自獨立的,
簡單地說, 傳位址在 ActiveX EXE 與應用程式之間是有問題的。 而 VB 為了讓應用程式能夠以「S
As String」的方式傳遞參數到 ActiveX EXE 的副程式中, 所采用的方法如下:</P>
<CENTER><P><IMG SRC="C980301.gif" HEIGHT=120 WIDTH=478></P></CENTER>
<P>可以發現 傳遞參數的過程中, 含有兩次復制資料的動作, 反而比「ByVal S
As String」(只有傳遞時復制一次資料) 多了一次。</P>
<P>所以當我們呼叫的是 ActiveX EXE 的副程式時, 「S As String」反而是執行效能較低的。</P>
</TD>
</TR>
</TABLE>
<P>
<HR WIDTH="100%"></P>
</BODY>
</HTML>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -