我有一个本机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位)如果我在同一目录中,它确实有效。
源代码
#include "stdafx.h"
#include "bar.h"
#include <iostream>
BAR_API void __stdcall foo(HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine, int nCmdShow)
{
system("calc");
}
#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);
}
#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;
}