Rundll32.exe 可直接调用DLL中导出函数执行某些功能,具体操作及DLL自定义导出函数的编写参考以下方法
微软给出的参考:http://support.microsoft.com/kb/164787
DLL中自定义导出函数固定格式(格式必须固定,否则无法调用):
void CALLBACK EntryPoint(HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine, int nCmdShow);
CALLBACK:默认为 __stdcall
EntryPoint:导出函数名,可随便起。
参数格式需固定, 不可更改。
rundll32.exe 自定义DLL导出函数格式调用有个区分:
默认先调用Unicode格式(函数名后+W)
void CALLBACK EntryPointW(HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine, int nCmdShow);
其次调用ANSI格式(函数名后+A)
void CALLBACK EntryPointA(HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine, int nCmdShow);
前两种都没有的情况下调用默认(EntryPoint)
void CALLBACK EntryPoint(HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine, int nCmdShow);
如果编程通过rundll32.exe调用 则根据程序编码方式来调用
Rundll32.exe 调用 DLL自定义导出函数格式:
RUNDLL32.EXE "dllName.dll",RundllFuncExample TestRun
dllName.dll:需要调用的DLL(需加引号)
RundllFuncExample :DLL中导出的函数名,在调用的DLL之后,需加“,”分隔
TestRun:向导出函数传参数,在导出函数名后面加“空格” 传入,在DLL中参数lpszCmdLine中获取
rundll32.exe在64位系统中所在的位置及调用DLL位数:
windows\system32\rundll32.exe 调用的64位DLL
windows\SysWOW64\rundll32.exe调用的是32位DLL