用C++ Builder做DLL遇见的问题

ltxd 2004-08-11 04:38:28
本人刚接触C++ Builder,现在遇见一个问题请教一下高手哈
我做了一个用C++ Builder做了一个DLL,这个DLL自己要跑一个线程,而且有一个主窗口,这个DLL输出一函数,RunDll里面的代码大致如下:
RunDll()
{
Application->CreateForm(主窗口);
Application->Run();
}
然后另外编写一程序,用CreateThread创建一线程,线程函数就是调用这个RunDll函数,这样程序就可运行起来了,大致代码如下:
DWORD WINAPI MyThreadProc(void *)
{
RuntDll();
}

void main()
{
HANDLE hThread = CreateThread(MyThreadProc);
WaitForSingleObject(hThread, INFINITE);
}
可是一关窗口,就会报异常错,将CreateThread换成_beginthread后基本上就不会出错了(但不能肯定,好象只是很少出错),请问一下要达到我的目的的标准写法是怎么写的?

另外:以上代码只是示意性的,基本意思就是这样

谢谢!
...全文
237 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
BenLeak 2004-08-12
  • 打赏
  • 举报
回复
不太了解楼主的程序流程是怎么样的
ahui2k 2004-08-11
  • 打赏
  • 举报
回复
DLL里加窗体是不是应该这样啊?
Tform1 *form = new TForm1(NULL);
form->ShowModal();

Big_foolcat 2004-08-11
  • 打赏
  • 举报
回复
如果你需要在DLL里处理消息的话还可以这样:

void __fastcall WndProc(TMessage &Message)
{
// 在这里处理消息吧
}

HWND itsHandle = AllocateHWnd( WndProc );
  • 打赏
  • 举报
回复
1.首先 Exe 中的 Application和Dll中的Application不是同一个东西,它们是不一样的。
2.Application->Run(); 这句话的意思是让程序开始接收消息.(是不应该在DLL中用,除非Exe和DLL没有关系。)
3.一但EXE进入 消息循环,DLL中的窗口已经自动有了消息循环(来自父窗口)。
sczyq 2004-08-11
  • 打赏
  • 举报
回复
我想主窗口总该是一个,而且是先有主窗口再使用线程.

若DLL动态装入,释放前要确保DLL线程已经结束.

线程的创建, 建议使用 new

jiangchun_xn 2004-08-11
  • 打赏
  • 举报
回复

不太清楚楼主的用意,不过调用dll的程序的确不是一个一般的vcl的project的,这样没有所

谓application->Run的方法还没有调用过,但是像这种用法的确让人很绕,为什么这么用?
zihan 2004-08-11
  • 打赏
  • 举报
回复
一个进程只能拥有一个主线程,在dll里面可以调用Application,但是不知道你在调用他的run有什么用,因为它本来就已经run了. 试试用楼上的方法.

铖邑 2004-08-11
  • 打赏
  • 举报
回复
RunDll()
{
Application->CreateForm(主窗口);
Application->Run();
}
不应该用Application->Run();吧?
jiangchun_xn 2004-08-11
  • 打赏
  • 举报
回复
RunDll()
{
Form=new myForm();//没在dll中用过application,不知道回不回有问题
}

13,822

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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