0

我有一个bar.dll几乎什么都不做的本机 dll ():

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

它对DLL_PROCESS_ATTACH.

我在这里读过,一旦其他一切都失败了

PATH 环境变量中列出的目录

被搜索。

我已放置bar.dll在 PATH 中的文件夹中(当我使用where它时,它已成功定位)。

但是当我尝试跑步时

rundll32 bar.dll,foo

它失败了

启动 bar.dll 时出现问题

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

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

源代码

酒吧.cpp

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

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

酒吧.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;
}
4

0 回答 0