本文解答兩個常見問題:

  • 執行 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 檔案則是使用 fgllinkfgl2p 將多個 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