全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2047
推到 Plurk!
推到 Facebook!

在 DLL 中使用 VCL 元件指定 Event 的問題

答題得分者是:dllee
davidsun
初階會員


發表:57
回覆:71
積分:25
註冊:2002-04-14

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-05-20 18:46:17 IP:61.66.xxx.xxx 未訂閱
大家好,    在下再撰寫 RS-232程式時,是使用 TMS 的 Async32 元件,但是最近我想將這些包入到 DLL 中。在 DLL 中,我會定義很多 Function / Procedure 來控制這個元件,當然,第一步驟就是要建立元件。    
unit MainUnt;    interface    uses vaComm, vaSystem, xUtils, _xComm;    function CreateCOMPort(PortNumber: Integer): Boolean; export; stdcall; // 建立通訊埠
function SetComm(br: TBaudRate; db: TDataBits = DB_8; sb: TStopBits = sbOneStopBit; // 設定通訊埠參數
  py: TParityBits = prNone): Boolean; export; stdcall;
procedure SetMonitorEvents(evEvent: TComEvents); // 設定要偵測的事件    //
function OpenPort: Boolean; export; stdcall;    // Events
procedure COMPortOpen(Sender: TObject);    var
  COMPort: TvaCOMM;
  OpenPortSuccess: Boolean = False;    implementation    function CreateCOMPort(PortNumber: Integer): Boolean;
// 建立通訊埠
begin
  COMPort := TvaComm.Create(nil);
  try
    COMPort.PortNum := PortNumber;
  except
    result := False;
    COMPort.Free;
  end;
end; 
所以想要使用在 DLL 中的這個元件,我就必須先呼叫 CreateCOMPort 來建立此元件,OK , 在元件中當然會有很多 Event,一般我們在普通的 AP 中,都是直接在 Object Inspector 中的 Events 雙擊兩下來編輯事件發生的程式碼。 但是在 DLL 中,我們要該事件發生的時候自己做一些處理。所以我在元件建立的時候:
// Events
procedure COMPortOpen(Sender: TObject);    var
  COMPort: TvaCOMM;
  OpenPortSuccess: Boolean = False;    implementation    function CreateCOMPort(PortNumber: Integer): Boolean;
// 建立通訊埠
begin
  COMPort := TvaComm.Create(nil);
  try
    COMPort.PortNum := PortNumber;
    COMPort.OnOpen := COMPortOpen;
  except
    result := False;
    COMPort.Free;
  end;
end;
我加上了 COMPort.OnOpen := COMPortOpen; 希望 OnOpen 事件發生時,處理我寫好的程序:COMPortOpen 但是這樣是不行的。編譯時會發生 Incompatible types: 'method pointer and regular procedure' 我知道 COMPort.OnOpen 應該是一個指標,知道一個程序的位置, 這訊息的意義我解讀是 : 一個方法的指標不能指定一個常規程序... 這樣的寫法在一般的 AP ,甚至我在 Thread 都沒有問題,但是在 DLL 則有問題。請問各位我是不是什麼定方沒有作對呢? 謝謝您的指教
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-05-20 18:59:38 IP:211.76.xxx.xxx 未訂閱
在 VCL 元件的事件 OnXXX 必需使用 VCL 元件的 Method 來指定, 您可以建一個空的表單,此表單內有 procedure COMPortOpen(Sender: TObject); 如此,COMPortOpen 就可以是任一元件的 OnXXX    http://www.ViewMove.com 視動自動化科技股份有限公司 ViewMove Technologies, Inc.
------
http://www.ViewMove.com
davidsun
初階會員


發表:57
回覆:71
積分:25
註冊:2002-04-14

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-05-20 19:43:51 IP:61.66.xxx.xxx 未訂閱
引言: 在 VCL 元件的事件 OnXXX 必需使用 VCL 元件的 Method 來指定, 您可以建一個空的表單,此表單內有 procedure COMPortOpen(Sender: TObject); 如此,COMPortOpen 就可以是任一元件的 OnXXX http://www.ViewMove.com 視動自動化科技股份有限公司 ViewMove Technologies, Inc.
感謝您的指教,這個問題原來我在以前有問過,也有解決過,但是時間一久就忘記了。還是很謝謝您。 版主對不起,重複發問了。Sorry 我以前問的連結:
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-05-20 19:58:31 IP:211.76.xxx.xxx 未訂閱
哇!都一年了耶... 您的 RS232 DLL 還在 try 嗎? 看您似乎用了不少 RS-232 的元件  (一年前的 href="http://www.ViewMove.com">http://www.ViewMove.com 視動自動化科技股份有限公司 ViewMove Technologies, Inc.
------
http://www.ViewMove.com
davidsun
初階會員


發表:57
回覆:71
積分:25
註冊:2002-04-14

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-05-20 22:24:00 IP:61.66.xxx.xxx 未訂閱
引言: 哇!都一年了耶... 您的 RS232 DLL 還在 try 嗎? 看您似乎用了不少 RS-232 的元件 (一年前的 href="http://www.ViewMove.com">http://www.ViewMove.com 視動自動化科技股份有限公司 ViewMove Technologies, Inc.
當初的做到一半,因為任務的關係就沒有繼續了.... 直到最近又有需要,其實用現成的元件就好, 例如免費的
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-05-21 10:39:02 IP:220.139.xxx.xxx 未訂閱
引言: 至於哪一個好用嘛..... 我覺得 TMS 的滿不錯的, 有 XModem , YModem , TTY, ANSI , Modem 等元件...,如果有經費的考量,那 CPort 很不錯但是上述的東西要自己繼承 COMPort 元件去加強... --------------------------------------------- 此外,因為我的電腦會用 Multi-IO RS-232 Card 連接超過 10 台數據機,所以我也必須用 Thread 的方式來控制 RS-232 不過呢!!以上兩個我現在都不算用了,準備用 CreateFile , GetCommState, SetCommState WaitCommEvent 等...Win API 自己寫.... 雖然剛開始的功能不會有這些商業元件強大,但是初期只要完成符合我的需求就好,功能可以隨者需求慢慢加強。做重要的是:可以百分之百掌握在我的手上.....
哈哈,原來到最後都還是用自己寫的比較好 我們公司也是用自己寫的,原本也想用現成的,但發現有些不能傳/收 > < href="http://www.ViewMove.com">http://www.ViewMove.com 視動自動化科技股份有限公司 ViewMove Technologies, Inc.
------
http://www.ViewMove.com
系統時間:2024-05-19 18:07:20
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!