#include <windows.h>
#include "dllhook.h"//包含导出的函数VOID CALLBACK TimerProc(     
HWND hwnd,
    UINT uMsg,
    UINT_PTR idEvent,
    DWORD dwTime
);BOOL WINAPI DllMain(
  HINSTANCE hinstDLL,
  DWORD fdwReason,
  LPVOID lpvReserved
)
{
switch(fdwReason)
{
case DLL_PROCESS_ATTACH:
MessageBox(NULL, "请登陆", "欢迎进入系统", 0);
SetTimer(NULL, 0, 500, (TIMERPROC)TimerProc);

break;
default:
break;
} return true;
}
VOID CALLBACK TimerProc(     
HWND hwnd,
    UINT uMsg,
    UINT_PTR idEvent,
    DWORD dwTime
)
{
   做一些必要的事情;使用另外一个dll的函数
}
在这种情况下,弹不出对话框,就是不执行这一句MessageBox(NULL, "请登陆", "欢迎进入系统", 0);
但是当我改成这样的时候,就可以弹出
BOOL WINAPI DllMain(
  HINSTANCE hinstDLL,
  DWORD fdwReason,
  LPVOID lpvReserved
)
{
switch(fdwReason)
{
case DLL_PROCESS_ATTACH:
MessageBox(NULL, "请登陆", "欢迎进入系统", 0);
SetTimer(NULL, 0, 500, (TIMERPROC)TimerProc);

break;
default:
break;
} return true;
}
相当于我没有引用第二个dll,就不会出现问题,请问这是什么原因呢
是不是放置第二个库的位置不对,应该放在哪里呢?还是其他的原因第二个库拿出来单独使用也是没有问题的
谢谢

解决方案 »

  1.   

    没看懂 你是 什么意思 试试 LoadLibrary 
    手工的 加载 dll ?
      

  2.   

    你好,这是远程线程注入的一个dll,在这里面还要调用其他的dll
    但是不知道为什么在调用其他dll的时候就不行了,如果将调用其他dll中函数的部分去掉
    就可以
    代码里面没有写注入dll的过程.这个只是注入的dll中的代码
      

  3.   

    找到了,问题所在了,SetTimer(NULL, 0, 500, (TIMERPROC)TimerProc);
    不能这样使用,请问能给解释一下SetTimer如何来工作的呢?
    是自己开线程还是怎样?
    谢谢