使用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)。 –