【问题标题】:Use Rundll32.exe to execute function exported by DLL使用Rundll32.exe执行DLL导出的函数
【发布时间】:2012-02-24 03:43:12
【问题描述】:

我有一个导出函数的 DLL:

__declspec(dllexport) 
void __stdcall MyEntryPoint(char* params)
{
    MessageBoxA("MyEntryPoint",params,0,0);
}

如何使用 rundll32.exe 加载我的 DLL 并调用MyEntryPoint()

【问题讨论】:

    标签: c winapi dll rundll32


    【解决方案1】:

    您需要定义一个具有非常特定签名的函数,以便它可以被 rundll32 调用。请查看this blog entry 以获取信息,其中包括有关您可能发生崩溃的方式和原因的详细信息。

    另外,请查看this answer 的类似问题,其中详细说明了函数的签名。

    为了让您的函数能够安全地调用,基本上需要将其定义为:

    void CALLBACK MyEntryPoint(HWND hwnd, HINSTANCE hinst, LPSTR pszCmdLine, int nCmdShow);
    

    void CALLBACK MyEntryPointW(HWND hwnd, HINSTANCE hinst, LPWSTR pszCmdLine, int nCmdShow);
    

    其他任何事情都会破坏堆栈并且可能(或可能不会)导致崩溃。我认为在更高版本的 Windows 中,rundll 会首先查找 MyEntryPointW 函数,如果找到则调用该函数 - 区别在于 Unicode pszCmdLine 参数。

    有关如何使用rundll32 的更多信息,请查看MSDN,其中详细说明了每个参数的预期内容等。

    【讨论】:

      猜你喜欢
      • 2011-03-13
      • 2012-08-23
      • 1970-01-01
      • 2012-08-23
      • 2011-06-09
      • 1970-01-01
      • 2012-12-20
      • 2012-08-03
      • 1970-01-01
      相关资源
      最近更新 更多