php7 4使用FFI連線C語言的動態庫

2021-10-06 09:44:36 字數 849 閱讀 2053

注意php7.4支援的ffi只支援對動態庫里的c介面的呼叫,並不支援c++。

網上看了一篇文章很受益:php ffi詳解 - 一種全新的php擴充套件方式。

我總結的**就來自這篇文章,所以此文不能算原創了。

首先,我用visual c++6.0(我就喜歡這種小的軟體)綠色版,開發了乙個dll擴充套件,開發擴充套件的方法見文章:《visual c++6.0編寫win32動態庫》。

將dll拷貝到我的thinkphp6專案的extend目錄裡了。然後php寫**:

$dll

=root_path()

.'extend'

.directory_separator

.'misdll.dll'

;$lib

= \ffi::

cdef

(<

<

<

ctype

int test

(int zh,int ych)

;ctype

,$dll);

echo

"dll test輸入結果14則代表執行正常,結果:"

.$lib

->

test(2

,12);

頁面訪問看到輸入結果為14,就代表成功了。

對了,別忘記php手動開啟對ffi的支援:

放開extension=ffi的注釋,還有修改ffi.enable=true,重啟即可。

注意:php ffi詳解 - 一種全新的php擴充套件方式介紹的可以預載入的功能,在windows裡並不被支援!你除錯的時候看到php的錯誤資訊就知道了。在linux裡看來可以,看來執行php還是在linux效率高啊!

C語言經典例74 連線兩個鍊錶

連線兩個鍊錶,如有鍊錶a和鍊錶b,將鍊錶b按原順序接在鍊錶a後面,鍊錶結構為 typedef int elementtype typedef struct node list 本題在邏輯上很簡單,不難想出只要得到鍊錶a的最後乙個節點指標,然後將其指向鍊錶b的第乙個節點即可,注意建立鍊錶時,鍊錶帶頭節...

使用C語言來擴充套件PHP,寫PHP擴充套件dll

以前寫過一次php擴充套件dll,那個是利用呼叫系統的com口實現的擴充套件,與php不能真正融合。心血來潮,研究了一下php的原始碼,網上找了一些資料,自己嘗試寫了乙個擴充套件dll,測試沒問題。下面記錄一下具體擴充套件方法 3 把vc 6.0安裝目錄中的 microsoft visual stu...

使用C語言來擴充套件PHP,寫PHP擴充套件dll

以前寫過一次php擴充套件dll,那個是利用呼叫系統的com口實現的擴充套件,與php不能真正融合。心血來潮,研究了一下php的原始碼,網上找了一些資料,自己嘗試寫了乙個擴充套件dll,測試沒問題。下面記錄一下具體擴充套件方法 3 把vc 6.0安裝目錄中的 microsoft visual stu...