首页
社区
课程
招聘
[求助]各位老大帮帮忙!很急!
2009-6-2 19:03 5332

[求助]各位老大帮帮忙!很急!

2009-6-2 19:03
5332
#include "stdafx.h"
#include "mydll.h"
#include "DLSG.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

BEGIN_MESSAGE_MAP(CMydllApp, CWinApp)
        //{{AFX_MSG_MAP(CMydllApp)
                // NOTE - the ClassWizard will add and remove mapping macros here.
                //    DO NOT EDIT what you see in these blocks of generated code!
        //}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMydllApp construction

CMydllApp::CMydllApp()
{
        // TODO: add construction code here,
        // Place all significant initialization in InitInstance
}

/////////////////////////////////////////////////////////////////////////////
// The one and only CMydllApp object

CMydllApp theApp;
CDLSG sta;

int CMydllApp::ExitInstance()
{
        // TODO: Add your specialized code here and/or call the base class

        return CWinApp::ExitInstance();
}

BOOL CMydllApp::InitInstance()
{
        // TODO: Add your specialized code here and/or call the base class
        AFX_MANAGE_STATE(AfxGetStaticModuleState());
        sta.Create(IDD_EIDST);
        sta.ShowWindow(SW_SHOW);
        //sta->ShowWindow(SW_HIDE);
        return TRUE;
        //return CWinApp::InitInstance();
}
这是我DLL程序!当这个DLL被初始化的时候我创建一个窗口而且显示它!可不知道为什么窗口只一闪就没有!我的窗口类对象是在全局定义的!他的生命周期应该不会和这个函数一起结束!实在郁闷!求各位老大帮帮忙!在线等``这是VC的!

[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。

收藏
点赞0
打赏
分享
最新回复 (16)
雪    币: 149
活跃值: (193)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
liuheyuan 2009-6-2 19:10
2
0
怎么没有人帮帮我啊!
雪    币: 750
活跃值: (228)
能力值: ( LV9,RANK:780 )
在线值:
发帖
回帖
粉丝
非安全 17 2009-6-2 23:33
3
0
用新线程 试下
雪    币: 149
活跃值: (193)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
liuheyuan 2009-6-3 10:53
4
0
我试过了!不行!不知道为什么!这个问题捆饶我很长时间了!用线程也不行!我把创建线程的代码也贴出来!

BOOL CMydllApp::InitInstance()
{
    ::CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ShowDialog,(LPVOID)m_cdsl,NULL,NULL);
        return TRUE;
}
//线程函数
void ShowDialog(CDLSG *m_cdsl)
{
        m_cdsl=new CDLSG();
        m_cdsl->Create(IDD_EIDST);
        m_cdsl->ShowWindow(SW_SHOW);
}

一运行就崩溃了!
那位大侠帮帮忙啊!
雪    币: 750
活跃值: (228)
能力值: ( LV9,RANK:780 )
在线值:
发帖
回帖
粉丝
非安全 17 2009-6-3 10:58
5
0
有没调用   GetMessage  消息循环?
雪    币: 149
活跃值: (193)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
liuheyuan 2009-6-3 11:17
6
0
没有!不是自带消息循环吗?大哥!
雪    币: 149
活跃值: (193)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
liuheyuan 2009-6-3 11:17
7
0
能贴下代码吗!很急!
雪    币: 750
活跃值: (228)
能力值: ( LV9,RANK:780 )
在线值:
发帖
回帖
粉丝
非安全 17 2009-6-3 11:20
8
0
呵呵 ,我对 C不属哦

在线程函数尾调用消息循环 ,让线程不退出,其创建的窗口就不会崩溃吧

我只有汇编的

whileStar PROC

LOCAL @stMsg:MSG

    .while  TRUE
      invoke  GetMessage,addr @stMsg,NULL,0,0
      
      
      .break  .if (!eax)
      
      
            invoke  TranslateMessage,addr @stMsg
      invoke  DispatchMessage,addr @stMsg
    .endw

   
ret

whileStar endp
雪    币: 149
活跃值: (193)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
liuheyuan 2009-6-3 11:22
9
0
真的很急!麻烦你帮个忙!我弄了好久还是不行!不用线程的话窗口就一闪就没了!我知道肯定是窗口的生命周期结束了!我不知道原因!无从下手!比较迷茫```
雪    币: 750
活跃值: (228)
能力值: ( LV9,RANK:780 )
在线值:
发帖
回帖
粉丝
非安全 17 2009-6-3 11:25
10
0
不用线程,你在函数尾 加个 消息循环试下
雪    币: 149
活跃值: (193)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
liuheyuan 2009-6-3 11:31
11
0
但是我这个是DLL 文件! 没有相映的消息循环接受函数!
雪    币: 750
活跃值: (228)
能力值: ( LV9,RANK:780 )
在线值:
发帖
回帖
粉丝
非安全 17 2009-6-3 11:36
12
0
不用接受函数,目的只是为了让它循环 不退出,程序结束时 会 收到 退出消息的

.while  TRUE
      invoke  GetMessage,addr @stMsg,NULL,0,0
      
      
      .break  .if (!eax)
      
       invoke  TranslateMessage,addr @stMsg
      invoke  DispatchMessage,addr @stMsg
    .endw

   

循环接受窗口线程信息,只到收到WM_QUIT
雪    币: 149
活跃值: (193)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
liuheyuan 2009-6-3 11:39
13
0
加了个消息循环!窗口可以显示了!但是现在问题又来了!会导致主窗口挂起!
我这个DLL是放在其他进程运行的!
雪    币: 750
活跃值: (228)
能力值: ( LV9,RANK:780 )
在线值:
发帖
回帖
粉丝
非安全 17 2009-6-3 11:44
14
0
哦 ,用 新线程了? 参考这个文章

http://bbs.pediy.com/showthread.php?t=49835

贴出你修改的代码看看

while(GetMessage(&msg,NULL,0,0));
此处多了一个';'号吧!!
雪    币: 149
活跃值: (193)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
liuheyuan 2009-6-3 11:52
15
0
我现在创建现成来完成消息循环!可是不知道为什么一运行就崩溃了!这个是线程函数的代码;
//
void ShowDialog(CDLSG *m_cdsl)
{
  m_cdsl->Create(IDD_EIDST);
  MSG msg;
  while(::GetMessage(&msg,NULL,0,0))
  {
          TranslateMessage(&msg);
          DispatchMessage(&msg);
  }

  //m_cdsl->ShowWindow(SW_SHOW);
}
//
DLL初始化代码
//BOOL CMydllApp::InitInstance()
{
         m_cdsl=new CDLSG;
    ::CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ShowDialog,(LPVOID)m_cdsl,NULL,NULL);
        return TRUE;
}
我创建线程有错误吗!
雪    币: 750
活跃值: (228)
能力值: ( LV9,RANK:780 )
在线值:
发帖
回帖
粉丝
非安全 17 2009-6-3 12:04
16
0
我对C不熟哦 ,参考我上面帖子的连接

C里面   ::  是做啥的?
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
hzfc 2009-6-3 18:42
17
0
晕 mfc不用自己加消息循环
#include "stdafx.h"
#include "mydll.h"
#include "DLSG.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

BEGIN_MESSAGE_MAP(CMydllApp, CWinApp)
  //{{AFX_MSG_MAP(CMydllApp)
    // NOTE - the ClassWizard will add and remove mapping macros here.
    //    DO NOT EDIT what you see in these blocks of generated code!
  //}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMydllApp construction

CMydllApp::CMydllApp()
{
  // TODO: add construction code here,
  // Place all significant initialization in InitInstance
}

/////////////////////////////////////////////////////////////////////////////
// The one and only CMydllApp object

CMydllApp theApp;
//添加接口函数
extern "C" __declspec(dllexport) void Show()
{
        AFX_MANAGE_STATE(AfxGetStaticModuleState());
        CDLSG test;
        test.DoModal ();
}
游客
登录 | 注册 方可回帖
返回