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

函式怎認不得IdTCPClient1 ?

答題得分者是:taishyang
ksmf
一般會員


發表:7
回覆:11
積分:3
註冊:2005-07-10

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-07-11 00:07:41 IP:61.219.xxx.xxx 未訂閱
請教大大,在Button1Click元件內可以認得IdTCPClient1   
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   IdTCPClient1->Host=SERVER_IP;
   IdTCPClient1->Port=SERVER_PORT;
   IdTCPClient1->Connect();
}    如果把內容移到一個函式內就會認不得這個IdTCPClient1 如下    void back()
{
   IdTCPClient1->Host=SERVER_IP;
   IdTCPClient1->Port=SERVER_PORT;
   IdTCPClient1->Connect();
}
會有[C   Error] Unit1.cpp(118): E2451 Undefined symbol 'IdTCPClient1'                       
知道這是什麼原因呢?
請指教
謝謝 
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-07-11 00:50:12 IP:218.168.xxx.xxx 未訂閱
在.h中將void back()宣告成Form1的Member Function
在.cpp中加上紅色部分
void __fastcall TForm1::back()
{
   IdTCPClient1->Host=SERVER_IP;
   IdTCPClient1->Port=SERVER_PORT;
   IdTCPClient1->Connect();
}
順心
ksmf
一般會員


發表:7
回覆:11
積分:3
註冊:2005-07-10

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-07-11 01:02:12 IP:61.219.xxx.xxx 未訂閱
OO 3q3q.
ksmf
一般會員


發表:7
回覆:11
積分:3
註冊:2005-07-10

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-07-11 16:41:29 IP:61.219.xxx.xxx 未訂閱
要使用時要如何用?  
Form1->back();?
 
3q
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-07-11 17:21:20 IP:210.68.xxx.xxx 未訂閱
假設您原本的程式沒有問題的話
.h
class TForm1 : public TForm
{
__published:        // IDE-managed Components
        TIdTCPClient *IdTCPClient1;
        TButton *Button1;
        void __fastcall Button1Click(TObject *Sender);
private:        // User declarations
public:                // User declarations
        void __fastcall back();
        __fastcall TForm1(TComponent* Owner);
};
.cpp
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   Form1->back();  //或back(),兩者都可以
   //back();    }
//---------------------------------------------------------------------------
void __fastcall TForm1::back()
{
   IdTCPClient1->Host=SERVER_IP;
   IdTCPClient1->Port=SERVER_PORT;
   IdTCPClient1->Connect();
}
ksmf
一般會員


發表:7
回覆:11
積分:3
註冊:2005-07-10

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-07-11 17:49:03 IP:61.219.xxx.xxx 未訂閱
沒錯啊,偶也是這樣做滴啊. 是那邊歪掉了?
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-07-11 18:13:22 IP:210.68.xxx.xxx 未訂閱
請PO上程式碼或錯誤訊息讓前輩們看看吧,不然你說不行誰知道哪邊不行呢? href="http://delphi.ktop.com.tw/topic.php?TOPIC_ID=58991">http://delphi.ktop.com.tw/topic.php?TOPIC_ID=58991
ksmf
一般會員


發表:7
回覆:11
積分:3
註冊:2005-07-10

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-07-11 18:20:50 IP:61.219.xxx.xxx 未訂閱
偶看一下如何上傳,等一下就伝上去. 再請大大指導. 謝謝
ksmf
一般會員


發表:7
回覆:11
積分:3
註冊:2005-07-10

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-07-11 18:57:41 IP:61.219.xxx.xxx 未訂閱
己傳上了.在 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=74739 請大大指導 謝謝
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#10 引用回覆 回覆 發表時間:2005-07-11 19:08:12 IP:210.68.xxx.xxx 未訂閱
您的專案與所問的問題未免差異太大了吧 專案中的 class="code"> 而(DWORD)TForm1::ProcessTran 要改成(DWORD)ProcessTran
ksmf
一般會員


發表:7
回覆:11
積分:3
註冊:2005-07-10

發送簡訊給我
#11 引用回覆 回覆 發表時間:2005-07-11 20:37:04 IP:61.219.xxx.xxx 未訂閱
感謝大大指導.是有一點差異,因為是在back()內叫不到. CALLBACK ProcessTran要寫成global的function要如何寫呢?不是很了解大大的意思. 3q
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#12 引用回覆 回覆 發表時間:2005-07-11 23:37:55 IP:218.168.xxx.xxx 未訂閱
引言: CALLBACK ProcessTran要寫成global的function要如何寫呢?
您原本是將CALLBACK ProcessTran實作成Form1的member function 所以您必須把那段程式碼寫在Form1的class scope之外即可
ksmf
一般會員


發表:7
回覆:11
積分:3
註冊:2005-07-10

發送簡訊給我
#13 引用回覆 回覆 發表時間:2005-07-12 13:17:37 IP:61.219.xxx.xxx 未訂閱
似乎這樣子做會變成undefine back()了,大大的可以通? 可否伝回給偶参考? 3q
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#14 引用回覆 回覆 發表時間:2005-07-12 14:04:52 IP:210.68.xxx.xxx 未訂閱
還要將
back(wparam);
改成下面這樣
Form1->back(wparam); 
ksmf
一般會員


發表:7
回覆:11
積分:3
註冊:2005-07-10

發送簡訊給我
#15 引用回覆 回覆 發表時間:2005-07-12 15:27:12 IP:61.219.xxx.xxx 未訂閱
這是之前己試過,還是沒法通. CALLBACK ProcessTran要寫成global的function的用意是在那邊? 3q 發表人 - ksmf 於 2005/07/12 15:43:17
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#16 引用回覆 回覆 發表時間:2005-07-12 16:00:12 IP:210.68.xxx.xxx 未訂閱
修改的地方如下所示
.h檔
class TForm1 : public TForm
{
__published:        // IDE-managed Components
  TIdTCPServer *IdTCPServer1;
  TIdTCPClient *IdTCPClient1;
  TButton *Button1;
  TButton *Button2;
  void __fastcall IdTCPServer1Execute(TIdPeerThread *AThread);
  void __fastcall Button1Click(TObject *Sender);
  void __fastcall IdTCPClient1Disconnected(TObject *Sender);
  void __fastcall IdTCPClient1Connected(TObject *Sender);
  void __fastcall FormDestroy(TObject *Sender);
  void __fastcall Button2Click(TObject *Sender);    private:        // User declarations    public:                // User declarations
   void __fastcall back(LPWAVEHDR);
  __fastcall TForm1(TComponent* Owner);
};    .cpp
static void CALLBACK ProcessTran(HWND hwnd,UINT message,DWORD dwins,LPWAVEHDR wparam, DWORD lparam)
{
   switch(message)
   {
      case MM_WIM_DATA:
         waveInUnprepareHeader(hwi, wparam, sizeof(WAVEHDR));
         wparam->dwBufferLength = CLIENT_BYTES_PER_DATA_BLOCK;//dwBytesRecorded;
         wparam->dwFlags &= ~MHDR_DONE;
         Form1->back(wparam);
         //back(wparam);
         waveInPrepareHeader(hwi, wparam, sizeof(WAVEHDR));
         waveInAddBuffer(hwi, wparam, sizeof(WAVEHDR));
      break;
      default:break;
   }
}    void __fastcall TForm1::Button1Click(TObject *Sender)
{ 
   int i;
   waveInOpen(&hwi,WAVE_MAPPER,&clnt_wfex,(DWORD)ProcessTran,NULL,CALLBACK_FUNCTION);
   for(i=0; i
看看是不是有不一樣的地方
ksmf
一般會員


發表:7
回覆:11
積分:3
註冊:2005-07-10

發送簡訊給我
#17 引用回覆 回覆 發表時間:2005-07-12 16:56:54 IP:61.219.xxx.xxx 未訂閱
嗯嗯,粉利害哦,山不転路転, waveInOpen(&hwi,WAVE_MAPPER,&clnt_wfex,(DWORD)ProcessTran,NULL,CALLBACK_FUNCTION); 這個(DWORD)ProcessTran是與之前的型態不一樣了,這樣程式跑跑會不會"糟精",請大大說明指導一下. 3q 發表人 - ksmf 於 2005/07/12 19:14:11
系統時間:2024-05-02 15:14:10
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!