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

請問要如何使用才能使DLL即時回傳變數值?

答題得分者是:dllee
franksyon
一般會員


發表:5
回覆:10
積分:3
註冊:2003-05-30

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-08-16 16:11:19 IP:61.56.xxx.xxx 未訂閱
請教各位大大 小弟我在DLL中寫了一個迴圈 extern "C" __declspec(dllexport) int __stdcall FPoint(int x); int __stdcall FPoint(int x) {  for(int i=0;i<100000;i ){ x =i; } return x; } 當我Call DLL之後,經過上面的語法,會把x的結果回傳回來 extern "C" __declspec(dllimport) int __stdcall FPoint(int x); void __stdcall FPoint(int x) { int y=20; Label1->Caption=FPoint(y); } 但是,他只會把x的結果.回傳回來... 如果我想在上例for迴圈裡面的 x =i; 即時的回傳道我的主表單上的Label1->Caption上 我該如何寫這個語法呢.搜尋Dll的相關文章,好像都沒看到.. 還是又搞錯了...@@"
dllee
站務副站長


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-08-17 23:36:53 IP:61.224.xxx.xxx 未訂閱
請您自行試試(可能需要修改)以下的 code:
//DLL
extern "C" __declspec(dllexport) int __stdcall FPoint(int x);
extern "C" __declspec(dllexport) int __stdcall FValueX(void);    int iValueX;    int __stdcall FPoint(int x)
{
  iValueX=x;
  for(int i=0;i<100000;i  )
  {
    Application->ProcessMessages(); // 讓主表單可以更新 Label
    iValueX =i;
  }
  return iValueX;
}
int __stdcall FValueX(void)
{
  return iValueX;
}
// 主表單程式
extern "C" __declspec(dllimport) int __stdcall FPoint(int x);
extern "C" __declspec(dllimport) int __stdcall FValueX(void);
// 作一個按鈕啟動, Timer 定時更新顯示數值
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  int y=20;
  FPoint(y);
}
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
  Label1->Caption=FValueX();
}
沒空更新的網頁... http://dllee.ktop.com.tw C及指標教學,計算機概論,資訊管理導論... http://dllee.adsldns.org 介紹Shells,LiteStep,GeoShell....
------
http://www.ViewMove.com
franksyon
一般會員


發表:5
回覆:10
積分:3
註冊:2003-05-30

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-08-18 03:36:03 IP:61.56.xxx.xxx 未訂閱
dllee大大..謝謝你.. 實不相蠻.....弟目前就是這個樣子用的... 雖然也能達到如期仿似的效果... 但不知道,有沒有另外的方法, DLL在執行中,是不是真的沒法把裡面的變數值即時傳出來... 例如說要他直接把值帶入到我的主表單中的控制棒.. 如果真的沒辦法的話,地也認了.. 對了,順便一問,dll在執行中,他是不是不能直接去控制我的表單物件呢.. 一定要主表單去摳他的值,在作動作ㄇ......
dllee
站務副站長


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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-08-19 13:20:24 IP:61.231.xxx.xxx 未訂閱
上述提供的方法是最簡單安全的使用方式。當然,您也可以直接將物件傳入 dll 內,在 dll 內直接改變它的內容,例如:
//DLL
__declspec(dllexport) int __stdcall FPoint(TLabel *label,int x);
int __stdcall FPoint(int x)
{
  int iValueX=x;
  for(int i=0;i<100000;i  )
  {
    Application->ProcessMessages(); // 讓主表單可以更新 Label
    iValueX =i;
    label->Caption=iValueX;
  }
  return iValueX;
}    // 主表單程式
__declspec(dllimport) int __stdcall FPoint(TLabel *label,int x);
// 作一個按鈕啟動, Timer 定時更新顯示數值
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  int y=20;
  FPoint(Label1,y);
}
沒空更新的網頁... http://dllee.ktop.com.tw C及指標教學,計算機概論,資訊管理導論... http://dllee.adsldns.org 介紹Shells,LiteStep,GeoShell....
------
http://www.ViewMove.com
系統時間:2024-05-14 4:48:17
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!