使用 CALL 及 REGISTER 函數

Applies To
Excel for Microsoft 365 Excel for Microsoft 365 for Mac Excel 2024 Excel 2024 for Mac Excel 2021 Excel 2021 for Mac Excel 2019 Excel 2016 Excel for iPad Excel for iPhone Excel for Android tablets Excel for Android phones

重要

警告 錯誤編輯登錄可能會嚴重損害您的作業系統,而導致需要重新安裝。 Microsoft 無法保證因不正確地編輯登錄所造成的問題是否能獲得解決。 編輯登錄之前,請備份所有重要的資料。 如需使用及保護您電腦的登錄的最新資訊,請參閱 Microsoft Windows 說明。

本文將說明 Microsoft Excel 中 CALLREGISTERREGISTER.ID 函數的公式語法及使用方式。

注意

CALL 和 REGISTER 函數不適用於 Excel 網頁版。

本文內容

描述

下列將說明 CALLREGISTERREGISTER.ID 函數所使用的引數與傳回值的資料類型。 視您的作業環境而定,這些引數與傳回值會稍微不同,資料類型表中會註明這些差異。

頁面頂端

資料類型

CALLREGISTERREGISTER.ID 函數中,type_text 引數會指定傳回值的資料類型,以及 DLL 函數或程式碼資源之所有引數的資料類型。 type_text 的第一個字元會指定傳回值的資料類型。 其餘的字元則指出所有引數的資料類型。 例如,若 DLL 函數傳回浮點數字,同時也採用整數和浮點數字做為引數,則 type_text 引數需要使用「BIB」。

下面的表格列出 Microsoft Excel 所能辨識的資料類型代碼、每一種資料類型的描述、引數或傳回值的傳遞方式,以及 C 程式語言中該資料類型標準的宣告。

代碼 描述 傳遞方式 C 語言宣告
A 邏輯
(FALSE = 0) ,TRUE = 1)
short int
B IEEE 8 位元組的浮點數字
(Windows)
參照 (Macintosh)
雙精度浮點數
(Windows)
double * (Macintosh)
C 以空字元結尾的字串 (最大字串長度 = 255) 參照 char *
D 位元組計數字串 (第一位元組為字串長度,最大的字串長度 = 255 字元) 參照 Unsigned char *
E IEEE 8 位元組的浮點數字 參照 double *
F 以空字元終止的字串 (最大字串長度 = 255 字元) 參照 (在適當的位置修改) char *
G 位元組計數字串 (第一位元組為字串長度,最大的字串長度 = 255 字元) 參照 (在適當的位置修改) unsigned char *
H 不含正負號的 2 位元組整數 unsigned short int
I 含正負號的 2 位元組整數 short int
J 含正負號的 4 位元組整數 long int
K 陣列 參照 FP *
L 邏輯
(FALSE = 0, TRUE = 1)
參照 short int *
M 含正負號的 2 位元組整數 參照 short int *
N 含正負號的 4 位元組整數 參照 long int *
O 陣列 參照 傳遞三個引數:
unsigned short int *
unsigned short int *
雙精度浮 [ ]
P Microsoft Excel OPER 資料結構 參照 OPER *
R Microsoft Excel XLOPER 資料結構 參照 XLOPER *

頁面頂端

註解

  • 上述 C 語言的宣告,是假設您編譯器的預設值 double 是 8 位元組、short integer 是 2 位元組,而 long integer 是 4 位元組。
  • 在 Microsoft Windows 程式設計環境中,所有的指標都是遠程指標。 例如,您必須在 Microsoft Windows 中將 D 資料類型代碼宣告為 unsigned char far *。
  • DLL 和程式碼資源內的所有函數,都會使用 Pascal 語言的呼叫慣例來呼叫。 大部分的 C 編譯器都允許您透過將 Pascal 關鍵字新增至函數宣告來使用 Pascal 呼叫約定,如下列範例所示: pascal void main (rows,columns,a)
  • 如果函數的傳回值是使用傳遞參照位址的資料類型,則可以用零指標當做傳回值。 Microsoft Excel 會把零指標解釋成 #NUM! 錯誤值。

頁首

其他資料類型資訊

此節包含了 F、G、K、O、P 和 R 等資料類型的詳細資訊,以及 type_text 引數的其他資訊。

F 和 G 資料類型

對於 F 和 G 資料類型,函數可以修改由 Microsoft Excel 配置的字串緩衝區。 如果傳回值類型代碼是 F 或 G,則 Microsoft Excel 會忽略函數傳回的值。 Microsoft Excel 反而會搜尋第一個對應資料類型 (F 或 G) 函數引數清單,然後把配置的字串緩衝區目前的內容當做傳回值。 Microsoft Excel 會為引數配置 256 個位元組,因此函數傳回的字串可能比收到的字串還大。

頁面頂端

K 資料類型

K 資料類型使用了一個不限大小的 FP 結構指標。 您必須在 DLL 或程式碼資源中定義此結構,如下所示:

typedef struct _FP
{
    unsigned short int rows;
    unsigned short int columns;
    double array[1];        /* Actually, array[rows][columns] */
} FP;

宣告 double array[1] 只會為單一元素陣列配置儲存體。 實際陣列中的元素個數則等於列數乘上欄數。

頁面頂端

O 資料類型

O 資料類型只能用於引數,而不能用於傳回值。 它會傳遞三個項目:指向陣列列數的指標、指向陣列欄數的指標,和指到二維浮點數字陣列的指標。

函數不會傳回值,而可以修改 O 資料類型傳遞的陣列。 若要這麼做,您可以使用 “>O” 作為type_text引數。 如需詳細資訊,請參閱下文的「在適當的地方修改 — 函數宣告為 Void」。

O 資料類型是為了要和 Fortran DLL 直接相容才建立的,其中 Fortran 是透過參照方式來傳遞引數。

頁面頂端

P 資料類型

P 資料類型是一個指向 OPER 結構的指標。 OPER 結構中包含了八位元組的資料,和二位元組的資料類型識別碼。 使用 P 資料類型,則 DLL 函數或程式碼資源便可以使用並傳回任何一種的 Microsoft Excel 資料類型。

OPER 結構定義如下:

typedef struct _oper

{
    union
    {
        double num;
        unsigned char *str;
        unsigned short int bool;
        unsigned short int err;
        struct
        {
            struct _oper *lparray;
            unsigned short int rows;
            unsigned short int columns;
        } array;
    } val;
    unsigned short int type;
} OPER;

類型欄位則包含下列其中一個數值。

類型 描述 Val 欄位
1 數值 num
2 字串 (第一個位元組為字串的長度) str
4 布林值 (邏輯值) bool
16 錯誤;錯誤值有:
0#NULL!
7#DIV/0!
15#Value!
23#REF!
29#NAME?
36#NUM!
42#N/A
err
64 陣列 array
128 遺漏的引數
256 空白的儲存格

最後的兩個數值只能做為引數,而不能是傳回值。 當呼叫程式省略引數時,便會傳遞遺漏引數值 (128)。 而當呼叫程式傳遞參照到空白儲存格時,則會傳回空白儲存格數值 (256)。

頁面頂端

R 資料類型 - 由 DLL 呼叫 Microsoft Excel 函數

R 資料類型是 XLOPER 結構 (OPER 結構的增強版) 的指標。 在 Microsoft Excel 4.0 及更新版本中,您可以使用 R 資料類型撰寫 DLL 和程式碼資源來呼叫 Microsoft Excel 函數。 在 XLOPER 結構中,DLL 函數除了可以傳遞資料外,還可以傳遞工作表參照並實作流程控制項。 R 資料類型與 Microsoft Excel 應用程式開發介面 (API) 的完整說明不在本主題的討論範圍內。 Microsoft Office XP 開發人員指南包含 R 資料類型、Microsoft Excel API 以及 Microsoft Excel 許多其他技術方面的詳細資訊。

頁面頂端

動態函數及重算

Microsoft Excel 通常只有在 DLL 函數 (或程式碼資源) 被輸入到儲存格,或者是當它的前導參照更改,或巨集計算到此儲存格時,才會計算其值。 在工作表中,您可以使 DLL 函數或程式碼資源變成為暫時性的,如此則每當工作表重新計算時,它也會跟著重新計算。 若要使函數成為暫時性的,請把驚嘆號 (!) 加為 type_text 引數中最後一個字元便可。

例如在 Microsoft Excel for Windows 中,每當工作表重新計算時,下面的工作表公式便會被重新計算:

CALL("Kernel32","GetTickCount","J!")

頁面頂端

在適當的地方修改 - 函數宣告為 Void

您可以在 type_text 中使用單一數字 n 傳回類型代碼,其中 n 是 1 到 9 的數字。 這可告訴 Microsoft Excel 修改 type_text 中第 n 個引數所指向位置中的變數,而不是傳回一個值。 這也稱為在適當的地方修改。 第 n 引數必須以參照資料類型的方式傳遞 (C、D、E、F、G、K、L、M、N、O、P 或 R)。 DLL 函數或程式碼資源也必須用 C 語言使用 void 關鍵字宣告 (或用 Pascal 語言的程序關鍵字)。

例如,若 DLL 函數使用以空字元終止的字串及兩個指向整數的指標來做為引數的話,便可以在適當位置修改字串。 只要把 type_text 引數定為 "1FMM",並將函數宣告為 void 即可。

Microsoft Excel 4.0 之前的版本會使用字元就 > 地修改第一個引數;除了第一個引數之外,沒有其他方法可以修改任何引數。 字元相當 > 於 Microsoft Excel 4.0 版和更新版本中的 n = 1。

頁面頂端