csdn上有个网友问这个问题,google了一下,发现C#无法实现这个功能。不过还是挺有意思的。
说起来简单,你的动态库必须实现一个叫EntryPoint的接口,rundll32.dll会loadlibrary并调用这个函数:
void CALLBACK
EntryPoint(HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine, int nCmdShow);
Rundll会执行下列步骤:
- 它分析命令行。
- 它通过 LoadLibrary() 加载指定的 DLL。
- 它通过 GetProcAddress() 获取 <entrypoint> 函数的地址。
- 它调用 <entrypoint> 函数,并传递作为 <optional arguments> 的命令行尾。
- 当 <entrypoint> 函数返回时,Rundll.exe 将卸载 DLL 并退出。
参见:
INFO:Windows Rundll 和 Rundll32 接口