递归火山软件开发平台

标题: 【解决方案】关于DLL动态库闪现窗口的错误问题。 [打印本页]

作者: server    时间: 2023-6-4 04:26
标题: 【解决方案】关于DLL动态库闪现窗口的错误问题。
总结应该是  窗口程序类 代码问题。
他根本就没执行消息循环处理。
而且,如果他执行了  也会卡主当dllmain不能返回。
我见有人以线程方式 执行 创建对话框,方式阻止窗口闪现。
实际上问题多多。
反思问题本质,就是没有执行消息循环,导致启动的线程自动释放而已。
而且,DLL使用线程创建窗口,可能会存在一些未知的错误。导致闪退或者崩溃。故:需要先在主线程创建一次窗口

下面是具体实现代码,请指教了。



  1. <火山程序 类型 = "通常" 版本 = 1 />

  2. 包 火山.程序

  3. 类 启动类 <公开 基础类 = 动态库程序类 折叠>
  4. {
  5.     方法 启动方法 <公开 类型 = 整数>
  6.     {
  7.         all.init ()
  8.         返回 (1)
  9.     }
  10. }

  11. 类 all <公开 折叠>
  12. {
  13.     变量 myWin <公开 静态 类型 = myWin>

  14.     方法 init <公开 静态>
  15.     {
  16.         wininit ()
  17.         启动线程 (线程模板1, , , , )

  18.     }

  19.     方法 wininit <公开 静态 折叠>
  20.     {
  21.         变量 win <类型 = 变整数>
  22.         win = 创建对象指针 (窗口)
  23.         读指针处对象 (win, 窗口).创建窗口 ()
  24.         销毁对象指针 (win)
  25.     }

  26.     方法 线程模板1 <静态 类型 = 整数 注释 = "提供线程执行函数的模板方法" 返回值注释 = "返回值未被使用">
  27.     参数 用户参数 <类型 = 变整数 注释 = "为启动线程线程时所提供的用户参数值">
  28.     {
  29.         all.myWin.创建窗口 (, , , , )
  30.         消息循环 ()
  31.         返回 (0)
  32.     }

  33.     方法 消息循环 <公开 静态 折叠>
  34.     {
  35.         @ MSG msg;
  36.         @ while (GetMessage (&msg, NULL , 0, 0))
  37.         @ {
  38.         @   TranslateMessage (&msg);
  39.         @   DispatchMessage (&msg);
  40.         @ }
  41.     }

  42.     #  
  43. }

  44. 类 myWin <基础类 = 窗口 折叠 折叠2 隐藏值属性 = "0" @视窗.布局 = "client_size = "290, 119"" 标题 = "test">
  45. {

  46.     #
  47. }
复制代码


ps:天天在论坛哔哔 被人嫌弃,哎。。。




作者: server    时间: 2023-6-4 04:30
ps:

不要在DLL 所有创建的窗口内预设 底图 等非基础操作。
会闪退或报错,之前给3D摄像机写插件的时候发现的。




欢迎光临 递归火山软件开发平台 (https://bbs.voldp.com/) Powered by Discuz! X3.4