社区
VCL组件使用和开发
帖子详情
请教高手~~怎么在Dll或者自己继承的Thread多线程中使用非可视化控件呢?
christopher_hp
2003-02-16 11:18:42
怎么在Dll或者自己继承的Thread多线程中使用非可视化控件呢?
我想用多线程来发信,或者在dll中向我自己的信箱发信怎么做不到了
我是
TNMSMTP *stmp;
申明了一个,可是设置它的属性如Host就出错了,提示是什么BPL文件错误,
头文件都包含了的的,可是。。。
...全文
55
12
打赏
收藏
请教高手~~怎么在Dll或者自己继承的Thread多线程中使用非可视化控件呢?
怎么在Dll或者自己继承的Thread多线程中使用非可视化控件呢? 我想用多线程来发信,或者在dll中向我自己的信箱发信怎么做不到了 我是 TNMSMTP *stmp; 申明了一个,可是设置它的属性如Host就出错了,提示是什么BPL文件错误, 头文件都包含了的的,可是。。。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
12 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
christopher_hp
2003-02-25
打赏
举报
回复
to lanren_me(阿波)
不明白你的意思
说明白一点可以吗
lanren_me
2003-02-24
打赏
举报
回复
估计非可视控件的使用应该一样;
lanren_me
2003-02-24
打赏
举报
回复
//线程中:我的例子:
h:
.....
protected:
TCGauge *CGauge;
.....
cpp:
__fastcall Tcolledata::Tcolledata(bool CreateSuspended)
: TThread(CreateSuspended)
{
CGauge= new TCGauge(NULL);
}
//同步函数中:
CGauge->Color=clBtnFace;
CGauge->ForeColor=clNavy;
MainForm->StatusBar->Panels->Items[0]->Style=psOwnerDraw;
CGauge->Top=MainForm->ProgressBarRect.Top;
CGauge->Left=MainForm->ProgressBarRect.Left;
CGauge->Height=MainForm->ProgressBarRect.Bottom-MainForm->ProgressBarRect.Top;
CGauge->Width=MainForm->ProgressBarRect.Right-MainForm->ProgressBarRect.Left;
CGauge->Visible=true;
CGauge->Parent=MainForm->StatusBar;
CGauge->MinValue=0;
CGauge->MaxValue=1000;
CGauge->AddProgress(1);
__fastcall Tcolledata::~Tcolledata()
{
CGauge->Visible=false;
delete CGauge;
}
christopher_hp
2003-02-24
打赏
举报
回复
jishiping(JSP 季世平)
那该怎么做呢?不可能把多个文件的内容放在一个文件里面发送吧 ?
jishiping
2003-02-20
打赏
举报
回复
BCB的线程没有消息循环,而TNMSMTP使用消息驱动,所以不行。
christopher_hp
2003-02-20
打赏
举报
回复
这就是线程发送邮件的代码,可以在总是出错,
如果是在Form里面就不会出错了
不知道为什么!!1
christopher_hp
2003-02-20
打赏
举报
回复
TNMSMTP *smtp1;
__fastcall TSendThread::TSendThread(AnsiString server, AnsiString name, \
AnsiString pass, AnsiString receive, \
int count, AnsiString file, \
bool CreateSuspended)
: TThread(CreateSuspended)
{
index = 0;
Server = server;
Name = name;
Pass = pass;
Receive = receive;
File = file;
Count = count;
smtp1 = new TNMSMTP(NULL);
smtp1->OnConnect = Connect;
smtp1->OnInvalidHost = InvalidHost;
smtp1->OnSuccess = Success;
}
//---------------------------------------------------------------------------
void __fastcall TSendThread::Execute()
{
Doing();
//---- Place thread code here ----
}
//---------------------------------------------------------------------------
void __fastcall TSendThread::Connect(TObject *Sender)
{
smtp1->Transaction("auth login");
smtp1->Transaction(Name);
smtp1->Transaction(Pass);
}
void __fastcall TSendThread::InvalidHost(bool &Handled)
{
MessageBox(0, "无效的主机地址", "Mail Bome", MB_ICONERROR|MB_OK);
Handled = false;
}
void __fastcall TSendThread::Failure(TObject *Sender)
{
MessageBox(0, "连接主机失败", "Mail Bome", MB_ICONERROR|MB_OK);
}
void __fastcall TSendThread::Success(TObject *Sender)
{
index++;
if(index < Count)
{
try
{
if(!smtp1->Connected)
smtp1->Connect();
smtp1->PostMessageA->FromAddress = Receive;
smtp1->PostMessageA->ToAddress->Text = Receive;
smtp1->PostMessageA->Body->LoadFromFile(File);
smtp1->PostMessageA->Subject = "Bome with E-mail";
smtp1->SendMail();
}
catch(...)
{
ShowMessage("再次发送邮件出错");
}
}
else
{
delete smtp1;
smtp1 = NULL;
ShowMessage("线程发送邮件成功!");
}
}
void __fastcall TSendThread::Doing()
{
if (smtp1->Connected)
smtp1->Disconnect();
smtp1->Host = Server;
smtp1->UserID = Name;
try
{
smtp1->Connect();
if (smtp1->Connected)
{
smtp1->PostMessageA->FromAddress = Receive;
smtp1->PostMessageA->FromName = "Mail Bome";
smtp1->PostMessageA->ToAddress->Text = Receive;
smtp1->PostMessageA->Body->LoadFromFile(File);
smtp1->PostMessageA->Subject = "Bome with E-mail";
smtp1->PostMessageA->Date = Now();
smtp1->SendMail();
}
}
catch(...)
{
ShowMessage("发送文件出错");
}
}
christopher_hp
2003-02-19
打赏
举报
回复
线程的问题总算解决了,可是还有一个问题就是,如果我在form中的smtp的success中加如一个变量控制发送邮件的数量,就可以连续发邮件,可是用线程去做不到,不知道是什么原因!!!
请教线程中是否还有些事情要注意呢?
等会我把线程的代码贴出来,希望各位解答一下!!!
albeta
2003-02-17
打赏
举报
回复
应该是:
TNMSMTP *stmp = new TNMSMTP(Application);
...
delete stmp;
你的代码没有实例化控件,当然出错。还有,如果控件用到了Windows的消息,你恐怕就要定义一个不可见窗体了。
invalid
2003-02-17
打赏
举报
回复
把组件放在数据模块窗口。
给数据模块增加一个Public方法如:SendMail。SendMail中完成发送邮件功能。写好相关代码。
在dll工程中加入此数据模块。保护头文件。
写你的dll导出函数,在函数中创建数据模块,然后调用数据模块的方法SendMail。
然后删除数据模块。
christopher_hp
2003-02-16
打赏
举报
回复
说的明白一点可以吗
invalid
2003-02-16
打赏
举报
回复
可以放在TDataModule中。包装成方法。dll中调用方法就是了。
C#全能速查宝典
《C#全能速查宝典》共分为8章,分别介绍了C#语言基础、Windows窗体及常用
控件
、Windows高级
控件
、
控件
公共属性、方法及事件、数据库开发、文件、数据流与注册表、GDI+绘图技术和C#高级编程,共包含562个C#编程
中
常用...
在MFC
中
调用
DLL
并开
多线程
VS2015
中
建立
dll
工程 1. 文件——>新建项目——>模板——>Visual C++——>MFC——>MFC
DLL
输入工程名first_
dll
2.下一步——>MFC扩展
DLL
3.建立first_...
Delphi
中
Thread
Error解决三例
在实际工作
中
遇到的
多线程
故障三例,虽然一切都过去,也记录下来,权当做个总结。 一个Delphi写的较老的
多线程
处理应用程序,数年间一直运行良好。近日突然频繁报线程错误,并且再两台不同的服务器
中
的错误情况也...
.NET Framework 开发自定义 Windows
控件
使用
可以开发和实现新的
控件
。可以通过
继承
来扩展熟悉的用户
控件
和现有
控件
的功能。还可以编写自定义
控件
,这些
控件
执行自己的绘制。确定创建何种类型的
控件
可能令人困惑。本主题重点介绍各种可
继承
控件
之间的差异,...
delphi
多线程
Delphi
中
有一个线程类T
Thread
是用来实现
多线程
编程的,这个绝大多数Delphi书藉都有说到,但基本上都是对T
Thread
类的几个成员作一简单介绍,再说明一下Execute的实现和Synchronize的用法就完了。然而这并不是
多线程
...
VCL组件使用和开发
604
社区成员
13,460
社区内容
发帖
与我相关
我的任务
VCL组件使用和开发
C++ Builder VCL组件使用和开发
复制链接
扫一扫
分享
社区描述
C++ Builder VCL组件使用和开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章