2016-08-17 72 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)。方便不是免费的。