注意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...