使用rundll32,可以將簡單的API調用到DLL中。如何使用rundll32.exe創建可從批處理中調用的DLL
兩個問題:
- 這種用法,應該是切入點使用
__cdecl
調用約定,或其他一些調用約定? - 是否有可能只傳遞數字參數或字符串?
使用rundll32,可以將簡單的API調用到DLL中。如何使用rundll32.exe創建可從批處理中調用的DLL
兩個問題:
__cdecl
調用約定,或其他一些調用約定?不要使用RUNDLL32.EXE。我不能說這比Raymond Chen做得更好:What’s the guidance on when to use rundll32? Easy: Don’t use it。
如果您通過博客條目讀取,並且仍然相信,這是你所需要的解決方案,這裏是deal:入口點必須遵循__stdcall
調用約定:
void CALLBACK
EntryPointW(HWND hwnd, HINSTANCE hinst, LPWSTR lpszCmdLine, int nCmdShow);
尾隨W
很重要,所以參數lpszCmdLine以Unicode(UTF-16LE)形式傳遞。 EntryPoint是一個佔位符,它可以是任何合法的符號。
舉個例子,你可以使用導出叫MyFunctionW
符號,並通過任意的命令行:
rundll32.exe MyDll.dll,MyFunction 132 C:\WINDOWS\INF\SHELL.INF
不過說真的,你應該評估其他選項(例如PowerShell)。方便不是免費的。
入口點必須使用__stdcall
調用約定:
void CALLBACK
EntryPoint(HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine, int nCmdShow);
這包括下列文件中:
但請參閱[什麼時候使用rundll32的指導?簡單:不要使用它](https://blogs.msdn.microsoft.com/oldnewthing/20130104-00/?p=5643)。 –