1

有没有人有一个将完整的 WIN32 Windows 应用程序构建为 dll 的示例?

我想导出一个函数,通过 rundll32 调用它,并拥有一个完整的 Windows 应用程序,其中包含装饰、菜单、加速器和弹出的所有内容。

我知道rundll32的调用约定:

void CALLBACK TestEntryW(HWND hWnd, HINSTANCE hInst, LPWSTR pszCmdLine, int nCmdShow);

我可以通过以下命令从该函数中提取一个 MessageBox:rundll32.exe test3.dll,TestEntry other params and args

我可以通过获取 DLL 的句柄并在我的调用中GetModuleHandle("test3.dll")使用它来从我的 DLL 加载资源。这似乎也适用,但我还没有工作(婴儿步骤..)。hInstLoadStringLoadIconLoadAccelerators

我可以通过使用这些字符串和图标来注册一个 Windows 类RegisterClassEx,但我必须使用父类hInst,否则我ERROR_CANNOT_FIND_WND_CLASS在调用CreateWindow. 我认为这是预期的。

但是,当我尝试在 中使用该类时CreateWindow,它返回 NULL,而GetLastError.

我可以检索使用从 rundll32 传递的 hInst 的窗口类GetWindowsLong(hWnd, GWL_ATOM)。将它用于 lpClassName,我可以拉出一个没有菜单和加速器的装饰窗口,但它有点时髦,因为 rundll 的窗口类通常只用于它的消息队列。我尝试使用子类化窗口SetWindowsLong来替换WndProc和调用CallWindowProc而不是DefWindowProc在我的 dll 中WndProc

由于无法在 MSVC++ 2010 Express 中调试它,我受到了阻碍。我用适当的条目替换了项目的命令和命令参数,因此它可以正确启动它,但它抱怨没有 rundll32.exe 的调试信息,并且断点等不起作用。

有任何想法吗?我在正确的轨道上吗?

4

0 回答 0