2016-08-17 40 views
0

使用rundll32,可以將簡單的API調用到DLL中。如何使用rundll32.exe創建可從批處理中調用的DLL

兩個問題:

  • 這種用法,應該是切入點使用__cdecl調用約定,或其他一些調用約定?
  • 是否有可能只傳遞數字參數或字符串?
+1

但請參閱[什麼時候使用rundll32的指導?簡單:不要使用它](https://blogs.msdn.microsoft.com/oldnewthing/20130104-00/?p=5643)。 –

回答

3

不要使用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)。方便不是免費的。