|
总结应该是 窗口程序类 代码问题。
他根本就没执行消息循环处理。
而且,如果他执行了 也会卡主当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:天天在论坛哔哔 被人嫌弃,哎。。。
|
|