本文解答兩個常見問題:
- 執行
fglrun時,應該指定.42r還是.42m檔案? .42r與.42m之間究竟有什麼差異?
.42m:p-code 模組檔
.42m 檔案是 p-code 模組,由 fglcomp 編譯單一 .4gl 原始碼檔案後產生。如果該 .4gl 檔案包含 MAIN 函式,就可以直接用 fglrun 執行:
fglrun module-name.42m
在這種情況下,執行期只有在 .4gl 中包含 IMPORT FGL 陳述式時,才會去尋找並載入其他外部模組。
.42r:連結後的執行檔索引
.42r 檔案則是使用 fgllink 或 fgl2p 將多個 p-code 模組組合而成。它本質上是一份函式名稱與所在模組的對照索引(類似字典),記錄每個函式分別位於哪個 .42m 模組中。
當執行以下指令時:
fglrun program.42r
執行期會查閱這份索引,找到 MAIN 函式的位置,並在程式呼叫(CALL)其他函式時,透過索引跨模組解析其所在位置。
部署注意事項
兩種方式的部署需求不同:
- 使用 fgllink 連結:部署時必須同時提供
.42m和.42r兩種檔案,缺一不可。 - 使用 IMPORT FGL:只需部署
.42m檔案;因為不會建立.42r檔案,執行期直接透過IMPORT FGL宣告解析模組相依關係。
簡言之:.42m 是實際包含程式碼的模組,.42r 是告訴執行期「去哪裡找哪個函式」的索引檔。了解兩者的角色,有助於在建置與部署 Genero 應用程式時做出正確的選擇。
原文:https://4js.com/ask-reuben/ig-246/
· 有任何 Genero 技術問題或翻譯疑問,歡迎來信
support@t100.app