VFP 愛用者社區 首頁 VFP 愛用者社區
本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
 
 常見問題常見問題   搜尋搜尋   會員列表會員列表   會員群組會員群組   會員註冊會員註冊 
 個人資料個人資料   登入檢查您的私人訊息登入檢查您的私人訊息   登入登入

請教PHP調用VFP建立的Dll問題
前往頁面 上一頁  1, 2, 3  下一頁
 
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區
上一篇主題 :: 下一篇主題  
發表人 內容
syntech



註冊時間: 2003-05-16
文章: 4212
來自: Taipei,Taiwan

第 16 樓

發表發表於: 星期二 一月 19, 2021 3:36 pm    文章主題: 引言回覆

CPS0204 寫到:
43
是的,在本網站或google也找不到逐步方法來製作com
我也很想學習! 希望各位前輩能賜教!謝謝


http://vfp.sunyear.com.tw/viewtopic.php?t=2097&postdays=0&postorder=asc&start=0

其他就 google " DEFINE CLASS Custom OLEPUBLIC FOXPRO "
我比較懶,
所以我都是做成 "function的集合" 那種 com 物件
其他就是
1.注意資料型態
2.必須考慮 "無狀態" 的情況,避免開共用cursor,檔案,......
3.prg 檔上限是 64k,要適當切割,不過我是搞 "function的集合",所以就分開就好了
4.注意 utf8 轉換
5.我只有用 utf- 8 的json 字串以json物件拆解成傳入參數,但回傳不是用 json 物件轉換為json 字串.而是自己組合自己轉換成 utf8 json 字串

_________________
如果公司有下列困擾:
1. 找不到便宜,快速,簡易的 生產排程軟體
2. 不知道如何快速排定 採購計劃
3. 成本抓不準,自己算比軟體算有用
4. 想學習系統規劃,想找系統架構的顧問

請聯絡我們,也許我們幫得上忙
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 AIM Address
CPS0204



註冊時間: 2014-08-24
文章: 441


第 17 樓

發表發表於: 星期二 一月 19, 2021 4:40 pm    文章主題: 引言回覆

vfp9 內寫:

DEFINE CLASS COM01 AS Custom OLEPUBLIC && 專案名稱是PHP_COM
FUNCTION getCUSDate() AS STRING
RETURN 'THIS IS A VFP COM'
ENDFUNC
ENDDEFINE




1.已做好foxpro 的 php_com.dll,及 copy 至 c:\xampp\php\ext 當中
2.也至php.ini加入 extension=php_com.dll
3. 也用 regsvr32 /s php_com.dll (用高權限開dos窗輸入執行)
4.有重啟appache
5.在php內寫如下:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>Example.php</title>
</head>
<body>
<?php

$vfp_com =new com("PHP_COM.COM01",null,CP_UTF8);
$TableStr = $vfp_com->getCUSDate();
$vfp_com = null;
print $TableStr;


?>
</body>
</html>



結果瀏覽器去執行此php程式,還是出錯:
Fatal error: in C:\xampp\htdocs\FROM_FP.php on line 10
第10行就是 new com那行!
找不出問題在哪?真傷腦!請協助一下謝謝!
回頂端
檢視會員個人資料 發送私人訊息
syntech



註冊時間: 2003-05-16
文章: 4212
來自: Taipei,Taiwan

第 18 樓

發表發表於: 星期二 一月 19, 2021 4:52 pm    文章主題: 引言回覆

第6樓的項目檢查看看

步驟1,2 感覺很奇怪,應該不是這樣用的
印象中,那是針對 "真正的以vc++撰寫的擴充dll"在用的


另外,不是只有dll檔copy過去
請依 http://vfp.sunyear.com.tw/viewtopic.php?t=7081 第二樓檢查檔案有沒有漏掉,
沒有漏掉才會正常登錄



我會在 vfp9 命令視窗

代碼:

o=CREATEOBJECT('php_dcom.com01')
? o.getCUSdata()
RELEASE O


測試正不正常


如果看到白畫面,
可以按右鍵選擇"檢視網頁原始碼"檢查是不是有內容
或是用瀏覽器的 "開發人員工具" 檢查有無其他錯誤

_________________
如果公司有下列困擾:
1. 找不到便宜,快速,簡易的 生產排程軟體
2. 不知道如何快速排定 採購計劃
3. 成本抓不準,自己算比軟體算有用
4. 想學習系統規劃,想找系統架構的顧問

請聯絡我們,也許我們幫得上忙
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 AIM Address
CPS0204



註冊時間: 2014-08-24
文章: 441


第 19 樓

發表發表於: 星期二 一月 19, 2021 6:45 pm    文章主題: 引言回覆

在vfp9內執行下列正常,有秀出我要的文字
o=CREATEOBJECT('php_com.com01')
? o.getCUSdata()
RELEASE O


可是在php 呼叫,就會有錯誤如下:

Fatal error: Uncaught Error: Class 'com' not found in C:\xampp\htdocs\FOX3.php:10 Stack trace: #0 {main} thrown in C:\xampp\htdocs\FOX3.php on line 10



php如下:一樣錯在new com那行

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>Example.php</title>
</head>
<body>
<?php

$vfp_com = new com('PHP_COM.COM01',null,CP_UTF8);
$TableStr = $vfp_com->getCUSDate();
$vfp_com = null;
print $TableStr;

?>
</body>
回頂端
檢視會員個人資料 發送私人訊息
syntech



註冊時間: 2003-05-16
文章: 4212
來自: Taipei,Taiwan

第 20 樓

發表發表於: 星期二 一月 19, 2021 8:36 pm    文章主題: 引言回覆

檢查 php.ini

這是我的設定
代碼:

expose_php = Off

error_reporting = E_ALL & ~E_NOTICE

extension_dir = "c:\AppServ\php7\ext"

enable_dl = On

cgi.fix_pathinfo=1  (去掉;)

extension  前頭的; 都去掉,再補上     
extension=php_pdo_sqlsrv_73_ts.dll
extension=php_sqlsrv_73_ts.dll
extension=php_com_dotnet.dll                         <===  注意這一行,沒有自己補進去

date.timezone = "Asia/Taipei"




https://stackoverflow.com/questions/37288730/enabling-dotnet-com-extension-in-php-5-6-12

_________________
如果公司有下列困擾:
1. 找不到便宜,快速,簡易的 生產排程軟體
2. 不知道如何快速排定 採購計劃
3. 成本抓不準,自己算比軟體算有用
4. 想學習系統規劃,想找系統架構的顧問

請聯絡我們,也許我們幫得上忙
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 AIM Address
CPS0204



註冊時間: 2014-08-24
文章: 441


第 21 樓

發表發表於: 星期二 一月 19, 2021 9:21 pm    文章主題: 引言回覆

syntech 寫到:
檢查 php.ini

這是我的設定
代碼:

expose_php = Off

error_reporting = E_ALL & ~E_NOTICE

extension_dir = "c:\AppServ\php7\ext"

enable_dl = On

cgi.fix_pathinfo=1  (去掉;)

extension  前頭的; 都去掉,再補上     
extension=php_pdo_sqlsrv_73_ts.dll
extension=php_sqlsrv_73_ts.dll
extension=php_com_dotnet.dll                         <===  注意這一行,沒有自己補進去

date.timezone = "Asia/Taipei"




https://stackoverflow.com/questions/37288730/enabling-dotnet-com-extension-in-php-5-6-12


已加上後,有重啟動appache run 得到:
Fatal error: in C:\xampp\htdocs\FOX5.php on line 9


第9行就是new com 那行,不知道為何如此?
$vfp_com = new com('PHP5.COM01',null,CP_UTF8);
回頂端
檢視會員個人資料 發送私人訊息
CPS0204



註冊時間: 2014-08-24
文章: 441


第 22 樓

發表發表於: 星期四 一月 21, 2021 7:42 am    文章主題: 引言回覆

php 呼叫dll 已成功,謝謝各位指導!
回頂端
檢視會員個人資料 發送私人訊息
小賴



註冊時間: 2004-12-27
文章: 469


第 23 樓

發表發表於: 星期四 一月 21, 2021 10:31 am    文章主題: 引言回覆

TO CPS0204 兄

恭喜!
我還在努力中 ...

您如何辦到的 ?
能否分享您的過程?
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件
CPS0204



註冊時間: 2014-08-24
文章: 441


第 24 樓

發表發表於: 星期四 一月 21, 2021 10:59 am    文章主題: 引言回覆

小賴 寫到:
TO CPS0204 兄

恭喜!
我還在努力中 ...

您如何辦到的 ?
能否分享您的過程?


可以分享:,我也是前輩指導才成功!
將2TIER 升上 3TIER ...多VFP中間層處理覆雜的工作!
回頂端
檢視會員個人資料 發送私人訊息
小賴



註冊時間: 2004-12-27
文章: 469


第 25 樓

發表發表於: 星期四 一月 21, 2021 3:55 pm    文章主題: 引言回覆

TO CPS0204
對不起; 我沒說清楚 ..

我是問 PHP 調用 DLL ;
New Com( .... 錯誤是如何解決的 ?
我也有同樣問題
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件
syntech



註冊時間: 2003-05-16
文章: 4212
來自: Taipei,Taiwan

第 26 樓

發表發表於: 星期五 一月 22, 2021 11:27 am    文章主題: 引言回覆

我找看看有沒有以前留下來的測試資料
_________________
如果公司有下列困擾:
1. 找不到便宜,快速,簡易的 生產排程軟體
2. 不知道如何快速排定 採購計劃
3. 成本抓不準,自己算比軟體算有用
4. 想學習系統規劃,想找系統架構的顧問

請聯絡我們,也許我們幫得上忙
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 AIM Address
violetlkk



註冊時間: 2003-06-21
文章: 82
來自: kaohsiung

第 27 樓

發表發表於: 星期五 一月 22, 2021 4:59 pm    文章主題: 引言回覆

我的程式碼 給你參考
沒有很專業 只是能跑而已
已經運作很多年了 工具老舊 但效能不錯
1.環境 winxp+appserv

2. php.ini 印象中沒改 hpptd.conf 好像只改 DocumentRoot ServerName 讓apache可以運作

3. php
<?php
require("auth.php");

$obj = new COM("cusmf.html");
$_query="id=".$PHP_AUTH_USER."&passwd=".$PHP_AUTH_PW."&IP=".$REMOTE_ADDR;
$_query.="&t1=".$_POST["t1"];
$_query.="&submit=ok";

echo $obj->html($_query);

$obj->Release();
$obj = null;
?>
$_query 只是要傳進去的資料而已

4.vfp
define class html as session olepublic
procedure html
lparameters _query

_lcoutput=''

中間省略.....

return _lcoutput
endproc

enddefine

*_lcoutput 就是要回傳的 html 碼
*這裡傳回去的是Big5編碼 網頁是utf8編碼要處理轉碼
*project info -> servers 裡面的class name 要正確,以前用拷貝project的來改 這裡就是原來的資料 會有問題
後來的做法就是建立新的project 這樣才正確

5. 最後
*把dll上傳到相應的位置
*把dll 拖曳去regsvr32 會看到成功的訊息
*記得要把 runtime 放進來
*vfp中間省略 就是處理要產出資料的地方 不管是 dbase,foxbase,vfp,mysql,mssql,oracle 都能處理
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件
小賴



註冊時間: 2004-12-27
文章: 469


第 28 樓

發表發表於: 星期五 一月 22, 2021 7:27 pm    文章主題: 引言回覆

感謝 syntech, CPS0204 與各位熱心的朋友幫助
小弟問題已解決 ;
最大的問題是換掉 xampp版本 (原來有 32/64版本問題)
再經 syntech, CPS0204 二位大大指點參數設定; 現已解決
再次感謝指教
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件
CPS0204



註冊時間: 2014-08-24
文章: 441


第 29 樓

發表發表於: 星期六 一月 23, 2021 8:24 am    文章主題: 引言回覆

記錄一下:報錯原因,可能如下
1.xampp 的版本去下載到官方的最新x64版不通,但改回32 bit 版即可用!
可用 phpinfo();來查看 x64/x86

2. xampp/86位元版本,應使用c:\windows\syswow64\regsvr32.exe 來註冊您的vfp 的 dll 檔 (開dos窗需用最高權限)
3.防毒軟體或個人防火牆擋住port位
4. 80 port位不對,例: 80->8080等,或原80port已被佔用!
5.此行需加在php.ini 中 (extension=php_com_dotnet.dll)

若可開通後
原本vfp9 的大量程式可變成dll,來當網頁後台的中間層,使多年的老vfp續用10 年以上,減輕使用php開發erp的困難度!又可享用vfp的cursor rushmore技術,又可以滿足由網頁來呼叫報表的功能!(手機/pad跨平台等)好處真多!
(需搭配小量的html5+css潤飾+js+php)
回頂端
檢視會員個人資料 發送私人訊息
CPS0204



註冊時間: 2014-08-24
文章: 441


第 30 樓

發表發表於: 星期六 一月 23, 2021 12:58 pm    文章主題: 引言回覆

記錄一下php可取用vfp的回傳值方法:已在PHP測過OK
1.return 值....只能回傳單一值
2. 屬性empty法:
屬性bb.P02 在vfp先define class
在php內取用 $TABSTR2=$vfp_com->BB->P02
3.陣列法
在php內取用
$vfp_com->ABC(2,1); //小心不是中刮弧[]
4.collection法
在VFP內先定義好COLLECTION

$TABSTR3=$vfp_com->b2->ITEM(1) ; 取第1個ADD的ITEM值

或依查詢指標INDEX
$TABSTR4=$vfp_com->b2->ITEM('SEEK1')
$TABSTR5=$vfp_com->b2->ITEM('INDEX2'); 由 INDEX2鍵值 來找
回頂端
檢視會員個人資料 發送私人訊息
從之前的文章開始顯示:   
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區 所有的時間均為 台北時間 (GMT + 8 小時)
前往頁面 上一頁  1, 2, 3  下一頁
2頁(共3頁)

 
前往:  
無法 在這個版面發表文章
無法 在這個版面回覆文章
無法 在這個版面編輯文章
無法 在這個版面刪除文章
無法 在這個版面進行投票
無法 在這個版面附加檔案
無法 在這個版面下載檔案


Powered by phpBB © 2001, 2005 phpBB Group
正體中文語系由 phpbb-tw 維護製作