多线程加载DLL窗体的Delphi实现 请帮个忙,在线等 ( 积分: 100 )

  • 主题发起人 主题发起人 gengxinxing
  • 开始时间 开始时间
G

gengxinxing

Unregistered / Unconfirmed
GUEST, unregistred user!
Delphi中使用多线程编程、DLL中如何创建窗体,这两个方面的文章网上非常多,我这里要说的是我在网上所没有找到的:
每一个插件就是一个DLL,里面都有窗体,加载插件的时候,需要为每一个插件分配一个线程。
在这种情况下,网上的代码就无能为力了,你将会发现一些问题:
1,非模态窗体只是闪烁一下又消失了;
2,模态窗体一直显示,也能处理各种窗体消息,但是主程序无法结束该线程;
3,如果没有结束线程,主程序退出时可能报非法引用内存错误;
4,……

总之,内存错误、程序不稳定之类的麻烦一大堆。

如下 就在退出时报内存错误

extern "C" BOOL FAR PASCAL EXPORT Initialize(const HWND hwnd) //设备初始化,提供主窗体句柄
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
hMain = hwnd;
Dlg.Create(IDD_HKVISION_DIALOG, NULL);
Dlg.ShowWindow(SW_SHOWMAXIMIZED);
return TRUE;
}
//////////////////////////////////////////////////////////////////
var
m_hwndparent:HWND;
m_initializeparm:integer;
TInitialize=function(const hw:HWND):integer;stdcall;
m_hwndparent:=application.Handle;
if @m_initialize<>nil then
begin
m_initializeparm:=m_initialize(m_hwndparent);
end;
 
VCL只支持单线程,所有界面元素的操作都要放在主线程里才安全
楼主不会把功能和界面分开设计吗?哪有一定要把界面分多线程的需求?
 
我必须在线程里调用dll中的函数,dll中的函数可能有窗体,也可能没窗体。没窗体还好,要是有窗体总得想个解决的方法不是么。
谢谢ysai的回帖。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部