【解决方案】关于DLL动态库闪现窗口的错误问题。
总结应该是窗口程序类 代码问题。他根本就没执行消息循环处理。
而且,如果他执行了也会卡主当dllmain不能返回。
我见有人以线程方式 执行 创建对话框,方式阻止窗口闪现。
实际上问题多多。
反思问题本质,就是没有执行消息循环,导致启动的线程自动释放而已。
而且,DLL使用线程创建窗口,可能会存在一些未知的错误。导致闪退或者崩溃。故:需要先在主线程创建一次窗口。
下面是具体实现代码,请指教了。
<火山程序 类型 = "通常" 版本 = 1 />
包 火山.程序
类 启动类 <公开 基础类 = 动态库程序类 折叠>
{
方法 启动方法 <公开 类型 = 整数>
{
all.init ()
返回 (1)
}
}
类 all <公开 折叠>
{
变量 myWin <公开 静态 类型 = myWin>
方法 init <公开 静态>
{
wininit ()
启动线程 (线程模板1, , , , )
}
方法 wininit <公开 静态 折叠>
{
变量 win <类型 = 变整数>
win = 创建对象指针 (窗口)
读指针处对象 (win, 窗口).创建窗口 ()
销毁对象指针 (win)
}
方法 线程模板1 <静态 类型 = 整数 注释 = "提供线程执行函数的模板方法" 返回值注释 = "返回值未被使用">
参数 用户参数 <类型 = 变整数 注释 = "为启动线程线程时所提供的用户参数值">
{
all.myWin.创建窗口 (, , , , )
消息循环 ()
返回 (0)
}
方法 消息循环 <公开 静态 折叠>
{
@ MSG msg;
@ while (GetMessage (&msg, NULL , 0, 0))
@ {
@ TranslateMessage (&msg);
@ DispatchMessage (&msg);
@ }
}
#
}
类 myWin <基础类 = 窗口 折叠 折叠2 隐藏值属性 = "0" @视窗.布局 = "client_size = \"290, 119\"" 标题 = "test">
{
#
}
ps:天天在论坛哔哔 被人嫌弃,哎。。。
ps:
不要在DLL 所有创建的窗口内预设 底图 等非基础操作。
会闪退或报错,之前给3D摄像机写插件的时候发现的。
页:
[1]