无法使用PATH中文件夹中的rundll32加载DLL

时间:2016-05-01 16:20:45

标签: c++ windows dll windows-10 rundll32

我有一个本机dll(bar.dll)几乎什么也没做:

导出一个打开foo的函数calc.exe

它在DLL_PROCESS_ATTACH上也是如此。

我读过here一旦其他一切都失败了

  

PATH环境变量

中列出的目录
搜索

我已将bar.dll放入PATH中的文件夹中(当我使用where成功找到它时)。

但是当我尝试运行时

rundll32 bar.dll,foo

失败了

  

启动bar.dll时出现问题

     

bar.dll不是有效的Win32应用程序。

(我已经尝试将其编译为32位和64位)如果我在同一目录中,它确实有效。

源代码

bar.cpp

#include "stdafx.h"
#include "bar.h"
#include <iostream>

BAR_API void __stdcall foo(HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine, int nCmdShow)
{
    system("calc");
}

bar.h

#ifdef BAR_EXPORTS
#define BAR_API __declspec(dllexport)
#else
#define BAR_API __declspec(dllimport)
#endif

#pragma comment(linker, "/EXPORT:foo=_foo@0")

extern "C" {    
    BAR_API void __stdcall foo(HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine, int nCmdShow);
}

dllmain.cpp

#include "stdafx.h"
#include "bar.h"
#include <iostream>

BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
                     )
{
    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:
        break;
    }
    return TRUE;
}

0 个答案:

没有答案