在无窗体的DLL中怎样使用TClientSocket?怎么添加它的事件响应?

kissfire 2003-07-09 11:23:53
能否给一个例子啊?
...全文
60 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
kissfire 2003-07-11
  • 打赏
  • 举报
回复
现在忙,过几天结帖吧!
kingcaiyao 2003-07-10
  • 打赏
  • 举报
回复
如果ClientSocket中的ClientType为stThreadBlocking,你直接写一个TClientSocket的多线程类就可以了,简单说:
class ClientThread : public TThread
{
private:
AnsiString File;
TClientSocket* ClientSocket;
TWinSocketStream* WskStream;
protected:
void __fastcall Execute();
public:
__fastcall ClientThread(AnsiString IPAddr,
WORD Port, AnsiString file);

};
当然如果ClientSocket为非阻塞模式,那就需要用一DataModule,jishiping说得没错。
pp616 2003-07-10
  • 打赏
  • 举报
回复
哎.dll中就用api来写吧。没这么多麻烦事。
albeta 2003-07-09
  • 打赏
  • 举报
回复
有个函数可以建立一个无界面窗体,忘记哪个函数了,自己查查吧。
kissfire 2003-07-09
  • 打赏
  • 举报
回复
真的不行么?但我使用该DLL的客户程序有窗体啊,应该可以吧?有没有例子啊,我的经验太少了。
猎人66 2003-07-09
  • 打赏
  • 举报
回复
没有窗体不能用TClientSocket,
因为TClientSocket是非阻塞的SOCKET,并且使用的消息方式,
没窗口,就没有消息,

建议使用SOCKET API实现其他方式,如事件,
或者阻塞的SOCKET,
铖邑 2003-07-09
  • 打赏
  • 举报
回复
老兄,ClientSocketConnect是你自己定义的事件函数,如果你将控件放在窗体上,双击时,BCB会自动给你生成相应的函数,但是你如果没有窗体,就要自己写,很简单找一个有窗体的贴一下就可以了。
jishiping 2003-07-09
  • 打赏
  • 举报
回复
没有Form,你可以建一个TDataModule,在DataModule里放TClientSocket。如果TClientSocket的ClientType为ctBlocking,那么年TDataModule都可以不要。
kissfire 2003-07-09
  • 打赏
  • 举报
回复
ClientSocket->OnConnect = ClientSocketConnect;

这样好象不行啊,编译错误,ClientSocketConnect未定义
kissfire 2003-07-09
  • 打赏
  • 举报
回复
好,试一下先,还有什么办法?
铖邑 2003-07-09
  • 打赏
  • 举报
回复
不对,没有窗体也可以用TClientSocket,你可以创建一个线程,利用线程的Handle来接收消息,这些我都试过,没有问题。
如果你的截面有窗体,就更简单了。可以把窗体实例传给DLL里的函数。
比如:
TClientSocket *ClientSocket; // 全局变量
void CreateSocket(TForm *MainForm)
{
ClientSocket = new TClientSocket(MainForm);
ClientSocket->OnConnect = ClientSocketConnect;
……
}

假定,你已经定义了ClientSocketConnect等函数。

1,316

社区成员

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

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