程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 用DELPHI開發AUTHORWARE的u32

用DELPHI開發AUTHORWARE的u32

編輯:Delphi
用Delphi開發AUTHORWARE的u32
  函數功能是AUTHORWARE最突出的特征,利用AUTHORWARE提供的系統函數能夠完成一些復雜的控制任務。對於一些特殊的任務,AUTHORWARE允許用戶自己定義函數,使得程序設計具有更大的靈活性。對於Windows系統來說,自定義函數是以動態鏈接庫(DLL)文件存儲的,因此存儲自定義函數的文件與當前交互式應用程序文件是分立。本文介紹一下如何用DELPHI開發AUTHORWARE的自定義函數—32 bit U32,本文以Delphi開發可在AUTHORWARE中調用顯示message box的U32為例子。雖然AUTHORWARE ATTAIN 5.0已提供了使用knowledge objects 顯示message box的功能,但在4.0以前的版本無此功能,這就可用其它語言開發自己的U32,在AUTHORWARE中調用。 
  開發U32可分為五個步驟: 
  
  創建工程文件
  
  創建函數
  
  創建資源文件
  
  編譯資源文件
  
  創建u32 
  1.創建工程文件 
  在file/new選擇dll生成一個dll文件,在file/add to project….加入一個包含U32函數代碼的單元myunit.pas(此單元在第二步創建函數中詳細說明)在uses後必須聲明所有可在authorware中調用的函數。例如: 
  
  exports MsgBox;
  最終的代碼如下所似:
  library authorware;
  uses
    SysUtils,Classes,
    myunit in 'myunit.pas';
  exports MsgBox;
  begin
  end.
  2.創建函數 
  當你創建一個函數可用在authorware中,必須聲明為exported 函數在關鍵字interface 後面加入代碼如下: 
  
   interface
     uses ,Dialogs,SysUtils,Windows;          
  function MsgBox(msg:string;mbType:
  Word;title:string):Word;export;
  Delphi32 需要添加{$ifdef WIN32} stdcall ;
   ($endif} 在函數聲明後面如:
  function MsgBox(msg:string;mbType:
  Word;title:string):Word;export;
  {$ifdef WIN32} stdcall ; {$endif}
  現在我們為函數加入代碼在implementation後面:
       const
      OKOnly=0;
      OKCancel=1;
      AbortRetryIgnore=2;
      YesNoCancel=3;
      YesNo=4;
      RetryCancel=5;
      Critical=16;
      Question=32;
      Excalamation=48;
      Information=64;
      DefaultButton1=0;
      DefaultButton2=256;
      DefaultButton3=512;
      ApplicationModal=0;
      SystemModal=4096;
  function StrToPch(Str:string):PChar;
      var a:PChar;
      begin
        a:=StrAlloc(Length(Str)+1);
        StrPCopy(a,Str);
        StrToPch:=a;
      end;
  function MsgBox(msg:string;mbType:
  Word;title:string):Word;
   VAR
    LpText,lpCaption:Pchar;
    h:HWND;
    begin
    lpText:=StrToPch(title);
     lpCaption:=StrToPch(msg);
      h:=GetActiveWindow();
      MsgBox:=MessageBox(h,lpText,lpCaption,mbType);
    end;
  3.創建資源文件 
  
  最後我們要做的事情是創建資源文件,這樣authorware才能直接調用函數。必須先創建.rc文件然後編譯成.res文件。使用記事本創建.rc的資源文件。加入如下定義:我將在後面解釋這些定義: 
  
  1 DLL_HEADER PRELOAD DISCARDABLE 
  BEGIN 
       "MsgBox", 
       "" 
  END 
  msgbox DLL_HEADER PRELOAD DISCARDABLE 
  BEGIN 
       "", 
       "W", 
       "SWS", 
       "Result := MsgBox(msg,mbType,title) ", 
       " ", 
       "show messagebox", 
  END
  如果一個 dll文件是按authorware調用轉換格式編寫,則存儲於其中的所有自定義函數的目錄也包含在該文件中,並且authorware在調用這些函數時所需的信息也包含在內,其目錄稱為目錄源,而且目錄源中的每一個函數有相應的定義,這些定義稱為定義源。具體格式如下: 
  
  1. 目錄源 
  
     目錄源的格式如下所示:
     | DLL_HEADER PRELOAD DISCARDABLE
  BEGIN
   “functionname [=exportname]”, 
  “functionname [=exportname]”,
  ….
  “functionname [=exportname]”,
  “”
  END
   ① | 是目錄源標識符;
   ② DLL_HEADER 是用於創建描述性文字的起始標記;
   ③ BEGIN 表示該目錄源文件的開始,
  而END則表示該目錄源的結尾。
  2.自定義函數的定義格式 
  
  對於目錄源中每一函數都要有一個相應的定義格式,具體格式如下所示: 
  
    functionname DLL_HEADER PRELOAD DISCARDABLE
  BEGIN
    “dllfilename”
    “returnvalue”
    “argumentlist”
    “description>”,
    “description”,
     …
    “description”
  END
  ① functionname 指的是在目錄源中以定義的函數名;
  ② DLL filename 表示存儲函數的dll文件名;
  ③ Returnvalue 表示該函數返回值類型;
  ④ Argumentlist 表示該函數中的參數類型列表;
  ⑤ Description 表示該函數描述性正文。
  描述性正文可以有很多行組成,但最後一行必須加上“”結束符。
  3.參數類型描述格式 
  
  參數類型用一個大寫字母表示,每一個字母表示一個參數格式,如下表所示: 
  
  描述格式 類型 描述格式     類型
     C Signed char P Far pointer
     B Unsigned char F  Float
     I Signed short integer     D Double
     W Unsignedshort integer        S Handle
     L Signed long integer V Void
     U Unsigned long integer  
  4.編譯資源文件 
  
  把.rc的資源文件保存為a3w.rc(注意不能保存文件名與dll文件名相同否則delphi自己的資源文件會覆蓋它),Delphi自帶的編譯文件為brc32.exe,在DOS模式下運行: 
  
  c:Delphi32inrc32 -r a3w.rc –foa3w32.res 
  
  現在把資源文件加入工程中,返回Delphi在vIEw/projcet source打開工程文件在 
  
    exports MsgBox;後可看到:
       {$R *.RES}
    刪除該行加入: {$ifdef WIN32}
                     {$R a3w32.res}
                 {$else}
                     {$R a3w16.res}
                 {$endif}
  編譯工程文件.
  5.創建u32 
  
  我們已經創建了32bit的authorware.dll,把它改名成authorware.u32.現在已成功創建了U32.在authorware中調用authorware.u32在運算設計按鈕添加代碼: 
  
  MsgBox("警告框",1+32+0+4096,"是否退出本系統?")
  
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved