new出来的idicmpclient的onreply事件怎么响应?

lo0P 2003-07-30 03:38:38
想用idicmpclient作个多线程的网络连通性检测软件
可是不知怎么出来reply
在h中定义
void __fastcall icmpReply(TObject *Sender,
const TReplyStatus &AReplyStatus);
程序里设置
icmp->OnReply=icmpReply;
不行

该怎么办?
...全文
183 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
lo0P 2003-08-15
  • 打赏
  • 举报
回复
季头实在是好人

同时也感谢其他帮助我的人
lo0P 2003-08-14
  • 打赏
  • 举报
回复
up
jishiping 2003-08-14
  • 打赏
  • 举报
回复
没有用过TIdIcmpClient这个控件,后面的就不知道如何做了。
lo0P 2003-08-11
  • 打赏
  • 举报
回复
帮忙啦,再出50分但给解决问题的人
lo0P 2003-08-08
  • 打赏
  • 举报
回复
谢谢季老大,程序通了

但是目的没有达到,
void __fastcall TForm1::icmpReply(TComponent *Sender,
const TReplyStatus &AReplyStatus)
{
ShowMessage("ok");
}
在icmp->Ping();之后icmp->OnReply没有发生??
lo0P 2003-08-07
  • 打赏
  • 举报
回复
还是没有搞定,错误成了 [C++ Error] Unit1.cpp(33): E2235 Member function must be called or its address taken

想在线程里用indy这么难么?
以下是我new indy的测试代码
//Unit1.cpp
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;

//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
TIdIcmpClient *icmp=new TIdIcmpClient(this);
for(int i=0;i<lvNetState->Items->Count;i++)
{
icmp->Host=lvNetState->Items->Item[i]->Caption;
lvNetState->Tag=i;
lvNetState->Items->Item[i]->StateIndex=2;
lvNetState->Items->Item[i]->SubItems->Strings[1]=Now().CurrentTime();
Application->ProcessMessages();
//icmp->OnReply=dd(0,rsEcho);
icmp->Ping();
}

icmp->OnReply=(TOnReplyEvent)icmpReply;

}
//---------------------------------------------------------------------------
//Unit1.h
//---------------------------------------------------------------------------

#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ComCtrls.hpp>
#include <ExtCtrls.hpp>
#include <ImgList.hpp>
#include <IdBaseComponent.hpp>
#include <IdComponent.hpp>
#include <IdIcmpClient.hpp>
#include <IdRawBase.hpp>
#include <IdRawClient.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TListView *lvNetState;
TPanel *Panel1;
TLabel *Label1;
TLabel *Label2;
TButton *Button1;
TEdit *edtTime;
TCheckBox *enTimer;
TImageList *ImageList1;
TButton *Button2;
TButton *Button3;
void __fastcall Button1Click(TObject *Sender);
void __fastcall Button2Click(TObject *Sender);
/* TEvent *icmpReply=new TEvent(TObject *Sender,
const TReplyStatus &AReplyStatus); */
void __fastcall icmpReply(TComponent *Sender,
const TReplyStatus &AReplyStatus);


void __fastcall Button3Click(TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
jishiping 2003-08-07
  • 打赏
  • 举报
回复
当然了,头文件 .hpp 和 .cpp 中都要修改。
jishiping 2003-08-07
  • 打赏
  • 举报
回复
看了你写的错误提示,只要将函数 icmpReply 中的参数类型 TObject 改为 TComponent 就
可以了,也就是:
void __fastcall icmpReply(TComponent *Sender, const TReplyStatus &AReplyStatus);
jishiping 2003-08-07
  • 打赏
  • 举报
回复
将 icmp->OnReply=(TOnReplyEvent)icmpReply; 改为 icmp->OnReply = icmpReply;
lo0P 2003-08-06
  • 打赏
  • 举报
回复
up+
lo0P 2003-08-06
  • 打赏
  • 举报
回复
up
lo0P 2003-08-04
  • 打赏
  • 举报
回复
不行啊,大哥
无论是在h声明还是在cpp声明都不可以

头疼
猎人66 2003-08-01
  • 打赏
  • 举报
回复
icmp->OnReply=(TOnReplyEvent)&icmpReply;
试试
lo0P 2003-08-01
  • 打赏
  • 举报
回复
提示
[C++ Error] Unit1.cpp(32): E2034 Cannot convert 'void (_fastcall * (_closure )(TObject *,const TReplyStatus &))(TObject *,const TReplyStatus &)' to 'void (_fastcall * (_closure )(TComponent *,const TReplyStatus &))(TComponent *,const TReplyStatus &)'
FlySky01 2003-08-01
  • 打赏
  • 举报
回复
你的写法没有错
看看是不是有别的问题
或者根本没有这个事件响应
猎人66 2003-08-01
  • 打赏
  • 举报
回复
没有语法错误吧?
那一定是Reply事件没有发生吧?
lo0P 2003-07-31
  • 打赏
  • 举报
回复
up

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧