線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2027
推到 Plurk!
推到 Facebook!

[bcb]DLL裡面有Thread 處理的值 要show到介面來

尚未結案
jageirene
一般會員


發表:2
回覆:3
積分:1
註冊:2003-09-16

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-09-20 17:00:19 IP:211.21.xxx.xxx 未訂閱
**目前是將dll和介面分開的**    1. 現在寫了一個dll(裡面的function會去跑一個Thread,此Thread 是專們在抓外部設備(雷射+A/D Card)->丟給電腦的值(height),此值(height)是隨量測物一直在變動的) 不知道要怎麼寫才能將Thread 所抓的值(height) 一直return出來?    dll片段程式    __declspec(dllexport) int __stdcall Laser_Initialize(void); __declspec(dllexport) double __stdcall Laser_start(void);    GetDigitalValue *sensor;//Thread    double __stdcall Laser_start(void) {                  Laser_Initialize();         sensor->Resume();            return sensor->height;//***這裡不知道要怎麼寫才能將                                  sensor->height 一直return出來    }    ============================================================== Thread 的片段程式    class GetDigitalValue : public TThread { private: protected:         void __fastcall Execute(); public:         __fastcall GetDigitalValue(bool CreateSuspended);         double voltage;         double height; };    void __fastcall GetDigitalValue::Execute() {         //---- Place thread code here ----         while(!Terminated)          {          AI_ReadChannel (card, channel, range, &Buffer);                                      //Analog In-->read into Buffer          voltage=converttovoltage(Buffer>>4);                                      //Analog In -->convert to voltage          if(voltage==NULL)          {                 //Form1->Edit1->Text="out of range";                 ShowMessage("out of range");          }          else          {                  height=voltagetoheight(voltage);                                     //voltage-->convert to height                                   //Form1->Edit1->Text=height;      //之前寫是綁著介面一起寫  的,所以Thread 一抓 到值就馬上show到介面 //但是現在包成dll 是不知道外部的介面是長怎樣的, 不知道現在要怎樣return這個一值在變動的值,讓Laser_start的funtion 會一值隨height的變動,也跟著return此值                         }          } }    2.測試此dll:  想寫一個介面來import 此dll 並將抓到的值show到介面上(一直show此值),是不是再介面也得寫一個Thread來show此一直動的值    void __fastcall TForm1::Button1Click(TObject *Sender) {        duble height;        height=Laser_start();  //Laser_start()是dll裡的function,但是 此寫法只抓到一個heght,而不是height一有更動就show出來                                  //不知道先進們有沒好方法,將此一值變動的height show到介面來          Form1->Edit1->Text=height;               Form1->Refresh();           }    ================================== 目前是將dll和介面分開的, 不知道各位先進 有沒有其他的好方法 可以達成上述相同目的的方法呢    請各位先進幫幫忙!! ^^||    感激不盡!!
mkbobo
一般會員


發表:4
回覆:68
積分:19
註冊:2003-04-10

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-09-29 15:02:12 IP:61.222.xxx.xxx 未訂閱
1.試著將你的thread 寫成 CALLBACK 的模式 2.或是利用SendMessage 方式只要值有變動 便透過message 將值傳出來
jageirene
一般會員


發表:2
回覆:3
積分:1
註冊:2003-09-16

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-10-02 00:49:40 IP:211.76.xxx.xxx 未訂閱
1.試著將你的thread 寫成 CALLBACK 的模式 "請問 CALLBACK式怎樣的觀念ㄋ" 2.或是利用SendMessage 方式只要值有變動 便透過message 將值傳出來 "請問該如何定義Message? 是否要定義在介面,然後在Thread SendMessage嗎?" "是否可以請mkbobo兄 舉個簡單的例子" 多謝嚕
mkbobo
一般會員


發表:4
回覆:68
積分:19
註冊:2003-04-10

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-10-03 15:39:41 IP:202.168.xxx.xxx 未訂閱
http://delphi.ktop.com.tw/topic.php?topic_Id=19814  << callback http://delphi.ktop.com.tw/topic.php?topic_Id=28465  << callback http://delphi.ktop.com.tw/topic.php?topic_Id=30485  << callback .dll Thread start   .  .  ...  當 value 變動 呼叫 callback function 例如我叫 *getvalue();  .  .  .... Thread end    介面程式 連結到 .dll 並將自己寫好的GetValue(); func point 給.dll func    接下來 當你的thread 檢查到 值變動時 便會呼叫那個 getvalue() 也就是你在你的介面程式自己寫好的 GetValue() func    以上是callback 的用法    =================================================================== SendMessage 的方法    .dll Thread start  . . ....  1.尋找你的介面程式的HANDLE 或是 當你使用這個DLL時將你自己的HANDLE給他  2.當 value 變動 SendMessage(你的介面程式的handle,用(WM_USER加某個值) , 你要傳遞的value , NULL); . ... .. Thread end    介面程式 攔截 Message 當(WM_USER加某個值)
#define WM_USER 加 1 LASER_VALUE // 加號打不出來 ^^"    void __fastcall TForm1::WndProc(TMessage &Message)
{
    switch(Message.Msg)
    {
        case LASER_VALUE:
            //你要做的事情
            //例如 Edit1->Caption = IntToStr(Message.WParam);
            break;
    }
}
至於攔截的message 的方法網路上已經很多了應該不用我在多說明
jageirene
一般會員


發表:2
回覆:3
積分:1
註冊:2003-09-16

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-10-04 05:54:01 IP:211.76.xxx.xxx 未訂閱
感激不盡!!
系統時間:2024-05-18 17:54:46
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!