c++ - 为什么 rundll 缺少条目?

标签 c++ winapi dll

我在 Visual Studio 2010 中创建了一个非常简单的 DLL,这是一个 DLL 类型的 win32 项目。

然后我将 DllMain 更改为:

BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
                     )
{
    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
        MessageBox(0,L"Hey there!",0,0);
        break;
    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:
        break;
    }
    return TRUE;
}

我用了rundll32 vahid-win32.dll,dllmain来运行它。显示消息框,但之后它给出

Error in vahid-win32.dll

Missing entry: dllmain

我的 DLL 有什么问题吗?或者和我一起? :-)

提前致谢

最佳答案

您的消息框不是来自您传递 DllMain 函数名称。相反,它是自动调用的。但 Rundll32 正在寻找名为 DllMain 的导出函数,其 dllexport 声明如下所示。

BOOL APIENTRY DllMain( HMODULE hModule,
                   DWORD  ul_reason_for_call,
                   LPVOID lpReserved
                 )
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
    MessageBox(0,L"Hey there!",0,0);
    break;
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
    break;
}
return TRUE;
}

extern "C" __declspec(dllexport) void mydllmain()
{
   MessageBox(0,L"Hey there again!",0,0);
}

当您使用参数 mydllmain 调用 RunDll32 时,它会给出两个消息框而不会出现错误。

关于c++ - 为什么 rundll 缺少条目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24970503/

相关文章:

c - 字节数组有问题/捕获屏幕截图

c++ - 如何在 Borland C++ 中使用 .NET 类

c++ - 错误 C4703 : potentially uninitialized local pointer variable 'pNamesPtr' used

C++:如何在命令提示符中的特定位置绘制 ASCII 字符

c++ - 错误消息无法打开包含文件 : 'gxall.h' : No such file or directory

c++ - 嵌套 For 循环和输出星号

c++ - 如何使用 C++ : When STDIN is NOT redirected 通过标准输入获取可用数据的大小

C++ 定时器问题

c++ - 将 Qt GUI 添加到动态库

delphi - 无法在 Windows 10 上加载 Firebird 客户端库