【问题标题】:Dllmain function is not being called没有调用 Dllmain 函数
【发布时间】:2021-08-17 09:23:42
【问题描述】:

我在这里搜索过,但这些问题都没有帮助我,所以是的,我会解释一下: 我的 Dllmain 函数在附加到 Visual Studio 项目设置中的进程 (rundll32.exe) 时没有被调用我将它更改为附加到 rundll32.exe 它应该在附加时显示一个消息框,但它只是不这样做。 我的代码:

// dllmain.cpp : Defines the entry point for the DLL application.
#include "pch.h"

BOOL APIENTRY DllMain( HMODULE hModule,
                      DWORD  ul_reason_for_call,
                      LPVOID lpReserved
                    )
{
   switch (ul_reason_for_call)
   {
   case DLL_PROCESS_ATTACH:
       MessageBox(NULL,L"ThumbsUp",L"Attached",MB_ICONINFORMATION);
   case DLL_THREAD_ATTACH:
   case DLL_THREAD_DETACH:
   case DLL_PROCESS_DETACH:
       break;
   }
   return TRUE;
}

谢谢

【问题讨论】:

  • 不要使用MessageBox来调试与DllMain有关的问题。使用OutputDebugString。我打赌函数 is 被调用了。
  • @PaulMcKenzie 谢谢,但它不起作用我的输出是这样的 pastebin.com/raw/S7QYXpe5 我的代码是这样的:pastebin.com/raw/HXVWEqSm 我在输出中看不到任何“我正在运行”
  • 如果你使用rundll32,请确保你像这样rundll32 blahblah.dll,something运行它,否则rundll32什么都不做。
  • 为了调用dll中的某些函数,需要先加载dll本身进行处理。你的dll加载了吗?基于pastebin.com/raw/S7QYXpe5 - 没有。那你想要什么?
  • “我的 Dllmain 函数在附加到进程时没有被调用” - 你在做什么导致进程实际加载你的 DLL?问题中缺少像这样的重要细节,因此甚至很难猜测出什么问题(代码或您的期望)。

标签: c++ winapi dll messagebox dllmain


【解决方案1】:

如果你使用rundll32.exe作为加载程序,你必须使用入口点来调用它,像这样:

在这种情况下,DllMain 已被调用,但您会收到如下消息框错误:

Error in D:\blah\blahblah.dll
Missing entry: x

这很正常,这是因为您没有从 .dll 导出任何外部可调用函​​数。 “x”在这里只是一个占位符,用于强制 rundll32 加载 .dll。如果你真的想使用rundll32,那么请阅读:How does RunDll32 work?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多