[bcb]DLL裡面有Thread 處理的值 要show到介面來 |
尚未結案
|
jageirene
一般會員 發表:2 回覆:3 積分:1 註冊:2003-09-16 發送簡訊給我 |
**目前是將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 發送簡訊給我 |
|
jageirene
一般會員 發表:2 回覆:3 積分:1 註冊:2003-09-16 發送簡訊給我 |
|
mkbobo
一般會員 發表:4 回覆:68 積分:19 註冊:2003-04-10 發送簡訊給我 |
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 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |