MasteringVFP/19/1

出自VFP Wiki

(修訂版本間差異)
跳轉到: 導航, 搜尋
第2行: 第2行:
談如何在 Linux 上使用VFP, 主要就是應用 WINE 這個 Open Source 來讓 Windows 的可執行檔能在 Linux 下執行.大致的介紹順序如下:
談如何在 Linux 上使用VFP, 主要就是應用 WINE 這個 Open Source 來讓 Windows 的可執行檔能在 Linux 下執行.大致的介紹順序如下:
-
====[[前言]]====
+
====前言====
由於 Linux 的風行,有人就想,為什麼不把 VFP 放到 Linux 上呢?
由於 Linux 的風行,有人就想,為什麼不把 VFP 放到 Linux 上呢?
於是就有人積極的尋找 Solution.
於是就有人積極的尋找 Solution.
第15行: 第15行:
在此特別聲明,以下資料多半來自於網路上,我會盡力註明出處.
在此特別聲明,以下資料多半來自於網路上,我會盡力註明出處.
-
====[[Wine 的歷史]]====
+
====Wine 的歷史====
請直接參考 2003/08/15 的 Wine Traffic, 網址是:
請直接參考 2003/08/15 的 Wine Traffic, 網址是:
http://kt.zork.net/wine/wn20030815_183.html#5
http://kt.zork.net/wine/wn20030815_183.html#5
-
====[[安裝,from tarball]]====
+
====安裝,from tarball====
請先到 wine 官方網站(http://www.winehq.org)下載 tarball 檔案.
請先到 wine 官方網站(http://www.winehq.org)下載 tarball 檔案.
以 tar xzf 解開之後,我們還要進行 patch, patch 檔網址在此:
以 tar xzf 解開之後,我們還要進行 patch, patch 檔網址在此:
第58行: 第58行:
wine 最後會以 SUID 形式存在.
wine 最後會以 SUID 形式存在.
-
====[[RPM 安裝]]====
+
====RPM 安裝====
請到官方網站下載符合你 Linux distribution 的 RPM 版本.
請到官方網站下載符合你 Linux distribution 的 RPM 版本.
然後執行
然後執行
第67行: 第67行:
但要注意的是,不保證可以用,建議還是以 tarball 安裝較佳.這樣也可加上 patch.
但要注意的是,不保證可以用,建議還是以 tarball 安裝較佳.這樣也可加上 patch.
-
====[[Usage]]====
+
====Usage====
winhelp,notepad, regsvr32, regedit 這幾個不用說明,就跟Windows 上的一樣~
winhelp,notepad, regsvr32, regedit 這幾個不用說明,就跟Windows 上的一樣~
progman 的話就跟 Windows 3.1 上的 Progman 一樣,執行以後,
progman 的話就跟 Windows 3.1 上的 Progman 一樣,執行以後,
第81行: 第81行:
</pre>
</pre>
-
====[[Configuration]]====
+
====Configuration====
"Version" Section 的 Windows key 值改為 win2k
"Version" Section 的 Windows key 值改為 win2k
"DllOverrides" Section 中所有 key 值改為 "native, builtin"
"DllOverrides" Section 中所有 key 值改為 "native, builtin"
第118行: 第118行:
然後編輯 ODBCDrivers.reg ,將其他 Driver 都刪掉,只留下 Microsoft Visual FoxPro Driver 即可,接著就拿到 Linux 上,執行 regedit.exe 匯入囉.
然後編輯 ODBCDrivers.reg ,將其他 Driver 都刪掉,只留下 Microsoft Visual FoxPro Driver 即可,接著就拿到 Linux 上,執行 regedit.exe 匯入囉.
-
====[[開始使用 VFP]]====
+
====開始使用 VFP====
我自己是建議不要用 setup 安裝,網路上的一些狐友也這樣說
我自己是建議不要用 setup 安裝,網路上的一些狐友也這樣說
就是用 copy 的方式把 Program Files 目錄下的 VFP 目錄直接複製到 ~/c/Program Files 下
就是用 copy 的方式把 Program Files 目錄下的 VFP 目錄直接複製到 ~/c/Program Files 下
第126行: 第126行:
再按一次 Alt+TAB 切回 VFP,即可.
再按一次 Alt+TAB 切回 VFP,即可.
-
====[[Issue]]====
+
====Issue====
*Declare DLL ok
*Declare DLL ok
大部分函數都已經實作出來了~
大部分函數都已經實作出來了~
第145行: 第145行:
**Undocked windows 需要被設定為 undockable (在Title band 按下滑鼠右鍵) 或他們無法取得 focus.
**Undocked windows 需要被設定為 undockable (在Title band 按下滑鼠右鍵) 或他們無法取得 focus.
-
====[[EULA - Microsoft 的阻撓]]====
+
====EULA - Microsoft 的阻撓====
以下大致從 http://www.linuxtransfer.com/h/misc_vfplinuxjackofhearts.htm 譯出.
以下大致從 http://www.linuxtransfer.com/h/misc_vfplinuxjackofhearts.htm 譯出.
僅將大意譯出,如果譯的不好,還請見諒.
僅將大意譯出,如果譯的不好,還請見諒.
第192行: 第192行:
VFP 可以在 Linux 上執行是非常吸引人的,想想一套便宜(或免費)的作業系統加上一個不貴又有威力的開發工具,和一個便宜(或免費)的後端資料庫,是多麼的不錯.很簡單的可以看出來為什麼 Microsoft 要試著去對抗他,並強加了和以往不一樣的的授權限制.
VFP 可以在 Linux 上執行是非常吸引人的,想想一套便宜(或免費)的作業系統加上一個不貴又有威力的開發工具,和一個便宜(或免費)的後端資料庫,是多麼的不錯.很簡單的可以看出來為什麼 Microsoft 要試著去對抗他,並強加了和以往不一樣的的授權限制.
-
====[[參考網址]]====
+
====參考網址====
安裝:
安裝:
*http://www.pinpub.com/FT/FTmag.nsf/0/843B563D8FB169F485256D6700710C3A
*http://www.pinpub.com/FT/FTmag.nsf/0/843B563D8FB169F485256D6700710C3A
第213行: 第213行:
*http://appdb.winehq.com/appview.php?appId=296;PHPSESSID=9e9d479fa55fb6c759ad092fd5aa3184
*http://appdb.winehq.com/appview.php?appId=296;PHPSESSID=9e9d479fa55fb6c759ad092fd5aa3184
-
====[[螢幕快照]]====
+
====螢幕快照====
或可直接連接至此 http://home.kimo.com.tw/h94u04bp6/archives/000103.html
或可直接連接至此 http://home.kimo.com.tw/h94u04bp6/archives/000103.html

在2005年1月31日 (一) 14:06所做的修訂版本

目錄

WINE

談如何在 Linux 上使用VFP, 主要就是應用 WINE 這個 Open Source 來讓 Windows 的可執行檔能在 Linux 下執行.大致的介紹順序如下:

前言

由於 Linux 的風行,有人就想,為什麼不把 VFP 放到 Linux 上呢? 於是就有人積極的尋找 Solution.

首先發現的就是 wine, 這個可以執行 Windows 執行檔的自由源碼專案. wine 是 wine is not emulator, 很清楚的指出,他並不是一個模擬器. 它可以執行 Windows 的 PE 執行檔,並將實際的 Windows API 轉為 Linux 的相對指令.

很幸運的,VFP 可以大致順利的在 Linux 上執行. 於是,展開了與 wine 共舞的樂章.

在此特別聲明,以下資料多半來自於網路上,我會盡力註明出處.

Wine 的歷史

請直接參考 2003/08/15 的 Wine Traffic, 網址是: http://kt.zork.net/wine/wn20030815_183.html#5

安裝,from tarball

請先到 wine 官方網站(http://www.winehq.org)下載 tarball 檔案. 以 tar xzf 解開之後,我們還要進行 patch, patch 檔網址在此: http://www.paulmcnett.com/vfp/wine/vfpwinepatchwinsize 這個 patch 檔主要是修正 WAIT WINDOW 和 !TooltipText window 無法正確顯示的問題. Patch 方法: cat vfpwinepatchwinsize | patch -p1 也可以手動編輯 wine/dlls/x11drv/winpos.c 在約 887 行的地方,找到

BOOL
X11DRV_SetWindowPos( WINDOWPOS *winpos )

這個 function,並在裡面的

TRACE
"hwnd %p ......

之前加上

    /* This is needed to flush pending X !ConfigureNotify events on this window */
MsgWaitForMultipleObjectsEx( 0, NULL, 0, 0, 0 );

存檔以後即可. 然後再執行 ./tools/wineinstall 它會出現訊息,建議不要以 root 身分來安裝. 如果你堅持要以 root 身分來安裝, 請先離開此 script, 修改此 script,讓他忽略此訊息.(178~184 行,前面加上'#' ) ,再執行此 script. 如果要用別的身分來安裝,請用 su 指令切換到其他 user 帳號,或重新以其他 user 帳號登入,再執行 ./tools/wineinstall 即可.

此 script會執行 ./configure,設置必要的設定檔以及路徑. 然後再執行

make depend && make && make install 

進行編譯及安裝工作.

若以其他user進行安裝的話,就依照 script指示即可 wine 最後會以 SUID 形式存在.

RPM 安裝

請到官方網站下載符合你 Linux distribution 的 RPM 版本. 然後執行

rpm -ivh wine-2003xxxx.ix86.rpm

即可~ 但要注意的是,不保證可以用,建議還是以 tarball 安裝較佳.這樣也可加上 patch.

Usage

winhelp,notepad, regsvr32, regedit 這幾個不用說明,就跟Windows 上的一樣~ progman 的話就跟 Windows 3.1 上的 Progman 一樣,執行以後, 有用過 Windows 3.1 的人,大概會很懷念~

  • winefile 則是檔案總管
  • wcmd 是"命令提示字元"
  • uninstaller 則是"新增/移除程式"
  • winecfg 則是調校 wine 設定的程式

執行軟體時,以 wine 執行之,假設你複製了小算盤(calc.exe)進去\n那麼就輸入 wine calc.exe 即可~ 安裝軟體,也一樣,執行 setup 即可:

wine setup.exe 

Configuration

"Version" Section 的 Windows key 值改為 win2k "DllOverrides" Section 中所有 key 值改為 "native, builtin" 此外把你自己 Winnt\system32 或 Windows\system 下的

OLEAUT32.DLL
COMMDLG.DLL
COMDLG32.DLL
SHELL.DLL
SHELL32.DLL
SHFOLDER.DLL
SHLWAPI.DLL
SHDOCVW.DLL
ADVAPI32.DLL
MSVCRT*.DLL
VFP6*.DLL
ODBC32.DLL
ODBC32GT.DLL
ODBC16GT.DLL
ODBCINT.DLL
ODBCCONF.DLL

都複製到 ~/c/windows/system 下 此外,OLE32.DLL, ADVAPI32.DLL, NTDLL.DLL 是不需要複製的,因為會造成無法執行. REGEDIT.EXE 也請複製到 ~/c/windows 下,因為我們要把 ODBC 的 Registry import 進去. 你也許會問 wine 不是提供了 regedit.exe 嗎?可是根據我自己的試驗,它並無法匯入. 請在 Windows 下執行 regedit.exe 將

HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\ODBC Drivers

以及

HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\Microsoft Visual FoxPro Driver

這兩個機碼都匯出.分別存為 ODBCDrivers.reg 及 VFPDriver.reg 然後編輯 ODBCDrivers.reg ,將其他 Driver 都刪掉,只留下 Microsoft Visual FoxPro Driver 即可,接著就拿到 Linux 上,執行 regedit.exe 匯入囉.

開始使用 VFP

我自己是建議不要用 setup 安裝,網路上的一些狐友也這樣說 就是用 copy 的方式把 Program Files 目錄下的 VFP 目錄直接複製到 ~/c/Program Files 下 再參考上面的 Configuration 一節作修正. 接著就可以執行 wine VFP6.EXE 啦~~ 進入以後,你會發現 command window 無法顯示游標,請用 Alt+TAB 切到別的視窗, 再按一次 Alt+TAB 切回 VFP,即可.

Issue

  • Declare DLL ok

大部分函數都已經實作出來了~ 可能會發生的問題,多半是路徑問題,此問題可以藉著修改 ~/.wine/config 來解決.

  • Record locking

20030318 版之前是有問題的,但之後的版本就都可以了

  • ActiveX

有些 ActiveX 會無法使用,那是因為有些 function 還沒實作出來的原因.

  • 中文

對我們來說,這是最大的問題了.Linux 中雖然已經支援中文,可是 wine 看來是還未支援,也因此,文字無法輸入到 VFP 視窗中.此外,字型名稱也是一大問題,由於小弟對中文字型設定這部分還不是很熟,再加上目前 X 組織又提出一個新的技術 Xft 要解決字型名稱問題,所以請期待吧~

  • 其他
    • 沒有 HTML Help.
    • 在 Class Designer/Form Designer 裡面無法 copy/paste 物件.
    • Undocked windows 需要被設定為 undockable (在Title band 按下滑鼠右鍵) 或他們無法取得 focus.

EULA - Microsoft 的阻撓

以下大致從 http://www.linuxtransfer.com/h/misc_vfplinuxjackofhearts.htm 譯出. 僅將大意譯出,如果譯的不好,還請見諒.

事情是這樣開始的,就在今年的四月左右,Ken Levy,Whil Hentzen在展示一個關於 VFP on Linux 的 Demo 之後,他接到一通來自微軟的電話,告知他說,這樣的一個 Demo 將可能會與 VFP EULA 衝突.後來這件事情就慢慢的擴散.... 什麼是 EULA ?? EULA 就是 End User Licence Aggreement 的縮寫. 以下就是與 VFP on Linux 有關的 VFP8 EULA條款: 3.1 General Distribution Requirements. (a) If you choose to redistribute Sample Code, or Redistributable Code (collectively, the "Redistributables") as described in Section 2, you agree: (i) except as otherwise noted in Section 2.1 (Sample Code), to distribute the Redistributables only in object code form and in conjunction with and as a part of a software application product developed by you that adds significant and primary functionality to the Redistributables ("Licensee Software"); (ii) that the Redistributables only operate in conjunction with Microsoft Windows platforms; 在 VFP 社群要求微軟作進一步說明的一星期後,這是微軟的說明(澄清): Visual FoxPro was designed and tested for use in creating applications that run on the Microsoft Windows platform; the same applies to the components that are provided to developers for redistribution with Visual FoxPro-based applications. If a developer wishes to distribute the Visual FoxPro runtime with an application, the runtime may only operate in conjunction with a Microsoft Windows platform. As with any contract, you should seek your own legal counsel's advice when interpreting your rights and obligations under the Visual FoxPro End User License Agreement. 大意是,VFP本身是在 Windows 平台上發展及測試的,和VFP一起提供給開發者散佈的元件也是.如果開發者想要將VFP runtime和應用程式一起發佈,runtime 應該只能(may only)在Microsoft Windows 平台上運行.如同任何的合約,你應該尋求你的法律顧問的建議. 在這篇文章中,http://www.linuxtransfer.com/h/misc_vfplinuxjackofhearts.htm 提出了三點疑問, 1.Running the VFP Development Environment on Linux VFP 開發者想要在一台 Linux 機器上將 VFP 當作一個開發環境. 這個企圖正是 McNett's FoxTalk 文章的主旨,而且是Levy舉辦該活動的主題,卻又宣告他是與VFP7 和 VFP8 的 EULA 衝突,不允許公開展示. 2.Deploying custom VFP applications on Linux workstations VFP 如同大家所知的,AP都是要與 runtime 一同包裝,並安裝到客戶那兒.以前很簡單,都只要幾個DLL檔案就行了,現在,最後一版的VFP,都是以MSM 形式給Installer tool使用.只有這些 MSM 檔案列在 REDIST.TXT 中,卻沒有明確的指定是哪些VFP DLL 檔案. 所以只要用這個方法是不是就可以避免了呢? 第一個問題是,如果發布自訂的VFP DLLs 在 EULA 裡是不被允許的,那麼 (1)如果不用 Windows Installer 技術的話,那麼市場上還有許多不使用 Windows Installer 技術的安裝工具,這些工具是不是就與 VFP EULA 衝突了呢?? (2)為什麼從6.0 到7.0,這樣的一個改變,卻沒有任何公告??就正常來說,一個產品的改變應該會被公告於 "Read Me" 或 "What's New" 檔案中.可是這卻被放到\nEULA 中,而缺乏任何說明. ok,假設VFP EULA 禁止散佈 VFP DLLs,只能使用 Windows Installer 技術. 總之,看起來,Microsoft 就是想把它們的應用程式綁在他們的 OS 上. 3.The Business Issues Microsoft 之所以需要 VFP, FoxBase 和 FoxPro, 主要就是為了要打擊Desktop database市場上其他的對手.那個時候,幾乎所有產品都不需要 runtime license,就這樣,一直延續到現在.Microsoft長期忽略 VFP,大概與Business Model有關,他們寧可開發者用VB 和 SQL Server,這樣就可從 SQL Server 那兒收到 licenses 費用. VFP 可以在 Linux 上執行是非常吸引人的,想想一套便宜(或免費)的作業系統加上一個不貴又有威力的開發工具,和一個便宜(或免費)的後端資料庫,是多麼的不錯.很簡單的可以看出來為什麼 Microsoft 要試著去對抗他,並強加了和以往不一樣的的授權限制.

參考網址

安裝:

相關資料收集:

微軟的恫嚇與EULA的相關討論:

Wine 官方網站 Guide:

Wine 應用程式相容性:

Wine 所收錄的 VFP Profile:

螢幕快照

或可直接連接至此 http://home.kimo.com.tw/h94u04bp6/archives/000103.html