【问题标题】:RunDLL32 does not execute anythingRunDLL32 不执行任何操作
【发布时间】:2020-10-12 21:50:47
【问题描述】:

我正在尝试创建一个可以使用 RunDLL32 执行的 DLL。我知道 RunDLL32 运行正常,因为如果我执行以下命令,它会弹出一个消息框: rundll32 printui.dll,PrintUIEntry/。 但是我无法让它执行我创建的 DLL,如下所示:

// 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(0, L"Hello1", 0, 0);
        break;
    case DLL_THREAD_ATTACH:
        MessageBox(0, L"Hello2", 0, 0);
        break;
    case DLL_THREAD_DETACH:
        MessageBox(0, L"Hello3", 0, 0);
        break;
    case DLL_PROCESS_DETACH:
        MessageBox(0, L"Hello4", 0, 0);
        break;
    }
    return TRUE;
}

代码编译良好(在 Visual Studio 2017 中,发布模式,x64)但是当我执行时

RunDLL32 MyDLL.dll

什么都没有发生。没有错误消息,没有输出,也没有消息框。这是为什么呢?

【问题讨论】:

    标签: c++ visual-studio dll


    【解决方案1】:

    由于您正在编译 64 位 DLL,请确保您运行的是 64 位版本的 RunDll32:

    rundll32.exe equivalent for 64-bit DLLs

    this page

    如果您将错误类型的 DLL 传递给 Rundll32,它可能无法运行而不会返回任何错误消息。

    即使您可以让 RunDLL32 加载您的 DLL,you can't safely call MessageBox() in DllMain() at all

    除了DllMain,您还需要export a function for RunDLL32 to execute。您可以在该函数中调用MessageBox(),例如:

    // 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
                         )
    {
        return TRUE;
    }
    
    extern "C" __declspec(dllexport) void CALLBACK MyFunctionW(HWND hwnd, HINSTANCE hinst, LPWSTR lpszCmdLine, int nCmdShow)
    {
        MessageBoxW(hwnd, lpszCmdLine, L"Hello", MB_OK);
    }
    
    rundll32 my.dll,MyFunction "hello world"
    

    【讨论】:

      猜你喜欢
      • 2020-07-11
      • 2020-07-30
      • 1970-01-01
      • 2023-01-20
      • 1970-01-01
      相关资源
      最近更新 更多