4
导出函数我有一个导出函数的DLL:使用的Rundll32.exe执行的DLL通过
__declspec(dllexport)
void __stdcall MyEntryPoint(char* params)
{
MessageBoxA("MyEntryPoint",params,0,0);
}
如何使用RUNDLL32.EXE加载我的DLL并调用MyEntryPoint()
?
导出函数我有一个导出函数的DLL:使用的Rundll32.exe执行的DLL通过
__declspec(dllexport)
void __stdcall MyEntryPoint(char* params)
{
MessageBoxA("MyEntryPoint",params,0,0);
}
如何使用RUNDLL32.EXE加载我的DLL并调用MyEntryPoint()
?
您需要定义一个具有非常特定的签名的函数,以便它可以被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,里面详细介绍什么期望每个参数的等
非常感谢..我应该已经看到,高达 – CnativeFreak 2012-02-01 13:08:45