使用rundll32可以将简单的API调用到DLL中。
两个问题:
__cdecl
调用约定还是其他一些调用约定?答案 0 :(得分: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)。便利不是免费的。
答案 1 :(得分:2)
入口点必须使用__stdcall
调用约定:
void CALLBACK
EntryPoint(HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine, int nCmdShow);
以下文档对此进行了介绍: