元件

元件是編譯結果的二進位層次實體。程式庫(.lib 檔案)及可執行程式(.exe 檔案),是利用 IBM® Rational® Rhapsody® 所產生原始檔來進行的建置程序最終輸出。

在瀏覽器中,您可以指定最終元件的名稱及位置。您也可以指定要對映至元件的元素、任何併入檔的位置,以及要在編譯期間進行鏈結的程式庫、額外來源及標準標頭。

如果元件是可執行檔,Rational Rhapsody 會產生其規格檔案及實作檔案,檔名分別是 Main<component>.hMain<component>.c。 這些檔案是針對作用中的元件所命名的。例如,如果作用中元件名為 DefaultComponent,且此元件是個執行檔,則其原始檔名稱為 MainDefaultComponent.hMainDefaultComponent.c。 如果元件是個程式庫,這些檔案的名稱只是 <component>.h<component>.c(沒有字首 "Main")。

元件規格 (.h) 檔案會宣告元件及其起始設定元,還有清理方法。 例如:

/************************************************
.
.
.
#ifndef MainDefaultComponent_H
#define MainDefaultComponent_H
/*---------------------------------------------*/
/* MainDefaultComponent.h                      */
/*---------------------------------------------*/

/* Constructors and destructors:*/

void DefaultComponent_Init();
void DefaultComponent_Cleanup();

#endif

/************************************************
   File Path   : DefaultComponent\DefaultConfig\
MainDefaultComponent.h
************************************************/

元件實作 (.c) 檔案包含主程式迴圈。例如:

.
.
.
#include "MainDefaultComponent.h"
#include <oxf/Ric.h>
#include "Default.h"

/*---------------------------------------------*/
/* MainDefaultComponent.c                      */
/*---------------------------------------------*/

void DefaultComponent_Init() {
    Default_OMInitializer_Init();
}

void DefaultComponent_Cleanup() {
    Default_OMInitializer_Cleanup();
}

int main(int  argc, char*  argv[]) {
   if(RiCOXFInit(argc, argv, 6423, "", 0, 0)) {
      DefaultComponent_Init();
      {
         /*#[ configuration
         DefaultComponent\DefaultConfig */
         /* your code goes here */;
         /*#]*/
      }
      RiCOXFStart(FALSE);
      DefaultComponent_Cleanup();
      return 0;
   }
   else      return 1;   }

/************************************************
   File Path   : DefaultComponent\DefaultConfig\
MainDefaultComponent.c
************************************************/

元件規格檔案包括 Ric.h 檔案,其中會定義 IBM Rational Rhapsody Developer for C 的即時架構。

主程式迴圈名為 RiCOXFInit(),是架構提供的其中一個函數。此架構起始設定函數會執行下列作業:

如果 RiCOXFInit() 順利返回,則 main() 函數會執行在配置的「起始設定」標籤中所輸入的任何起始設定碼。main() 函數接著會呼叫函數以起始設定元件(例如,DefaultComponent_Init())。 此函數會依序呼叫要起始設定元件中所含任何套件的函數。

一旦元件已起始設定,main() 函數會呼叫 RiCOXFStart() 函數以啟動主要作業。依預設,產生的程式碼會將參數值 FALSE 傳遞給 OXFStart() 函數。 這表示系統不會分出新作業,且模型會在主要系統執行緒上執行。

如果您正在建立 GUI 應用程式,而已編譯的元件是個程式庫,其不得干擾主程式執行緒,則您要傳遞值 TRUERiCOXFStart(),以防止此程式庫控制系統。

RiCOXFInit()RiCOXFStart() 函數會一起啟動 Rational Rhapsody 模型執行。必須在模型可以開始接收事件之前呼叫這兩個函數。如果元件是個將會與其他應用程式鏈結的程式庫(例如,GUI 應用程式),則 Rational Rhapsody 不會為其產生 main() 函數。您必須在主程式迴圈過程中,撰寫程式碼來呼叫這兩個函數,首先呼叫 RiCOXFInit(),然後呼叫 RiCOXFStart(),以便應用程式啟動事件處理。

如果您的動畫埠號在 rhapsody.ini 檔案中設定為任何埠號,並非預設值 6423,您必須將正確的埠號作為第三個參數傳遞給 RiCOXFInit()

例如,在家用暖氣系統範例中,GUI 應用程式的程式進入點(hhsproto 元件)是定義在 hhsprdlg.cpp 檔案中,並具有下列呼叫:

RiCOXFInit(NULL, NULL, 6423, "", 0, 0);

RiCOXFInit() 的第三個引數 6423 是預設的動畫埠號。如果您的動畫埠設定為不同號碼,您可以編輯此引數以符合使用中的埠號(例如,6424)。否則,動畫不會運作。

註: 呼叫 OXFInit()OXFStart() 之前,必須建立所有廣域實例。否則,應用程式會當掉。

當最後一個事件已處理完成,模型也已達到終止點,main() 函數會呼叫要清除元件的函數(例如,DefaultComponent_Cleanup())。

元件原始檔會產生至配置目錄,依預設位於元件目錄下面。例如:

<project_dir>\<component_dir>\<config_dir>

意見回饋