CLVII. W32api 函數

簡介

本增加庫是用於連線 DLL 的通用增加 API。它最初是用來容許從 PHP 中訪問 Win32 API,不過也可以訪問通過其它 DLL 匯出的其它函數。

目前支援的有 PHP 的標準類型(string,boolean,float,integer 和 null)以及用 w32api_deftype() 函數所自訂的類型。

注: 本增加已被搬移到 PECL 庫中且自以下版本起不再被綁定到 PHP 中:5.1.0。

警示

本增加模組是實驗性的。本模組的行為,內含其函數的名稱以及其它任何關於此模組的文件可能會在沒有知會的情況下隨 PHP 以後的發佈而改變。使用本增加模組風險自擔。

需求

本增加只能工作在 Windows 系統中。

安裝

本增加模組作為 PHP 內核的一部分,無需安裝即可使用。

運行時配置

本增加模組在 php.ini 中未定義任何配置選項。

資源類型

本增加定義了一種資源類型,用於會員自訂類型。此資源名為 "dynaparm"

預定義常量

以下常量由本增加模組定義,因此只有在本增加模組被編譯到 PHP 中,或是在運行時被動態加載後才有效。

DC_MICROSOFT (integer)

DC_BORLAND (integer)

DC_CALL_CDECL (integer)

DC_CALL_STD (integer)

DC_RETVAL_MATH4 (integer)

DC_RETVAL_MATH8 (integer)

DC_CALL_STD_BO (integer)

DC_CALL_STD_MS (integer)

DC_CALL_STD_M8 (integer)

DC_FLAG_ARGPTR (integer)

範例

以下例子演示如何得到系統持續運行的時間,並把它顯示在一個訊息對話框中。

例子 1. 得到系統持續運行的時間,並把它顯示在訊息對話框中

<?php
// 定義所需的常量,來自
// Visual Studio/Tools/Winapi/WIN32API.txt
define("MB_OK"0);

// 加載此增加
dl("php_w32api.dll");

// 註冊 GetTickCount 函數,來自 kernel32.dll
w32api_register_function("kernel32.dll",
                         
"GetTickCount",
                         
"long");

// 註冊 MessageBoxA 函數,來自 User32.dll
w32api_register_function("User32.dll",
                         
"MessageBoxA",
                         
"long");

// 取得開機時間訊息
$ticks GetTickCount();

// 轉換為易於理解的文字
$secs  floor($ticks 1000);
$mins  floor($secs 60);
$hours floor($mins 60);

$str sprintf("You have been using your computer for:".
                
"\r\n %d Milliseconds, or \r\n %d Seconds".
                
"or \r\n %d mins or\r\n %d hours %d mins.",
                
$ticks,
                
$secs,
                
$mins,
                
$hours,
                
$mins - ($hours*60));

// 顯示一個訊息對話框,只有一個 OK 按鈕和上面的開機時間文字
MessageBoxA(NULL,
            
$str,
            
"Uptime Information",
            
MB_OK);
?>
目錄
w32api_deftype -- 為 w32api_functions 函數定一個類型
w32api_init_dtype --  建立了一個資料類型的案例,並且將函數傳入的值填入其中
w32api_invoke_function -- 帶有一個參數的執行一個函數,參數傳遞在函數名的後面
w32api_register_function -- 從函數庫中使用 PHP 註冊一個函數 function_name
w32api_set_call_method -- 設定呼叫的方法