有没有人有一个将完整的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
我可以通过GetModuleHandle("test3.dll")
获取DLL的句柄并在我的hInst
调用中将其用作LoadString
来从我的DLL加载资源。这似乎也适用于LoadIcon
和LoadAccelerators
,但我还没有工作(宝贝步骤......)。
我可以使用这些字符串和图标通过RegisterClassEx
注册Windows课程,但我必须使用父hInst
或在调用ERROR_CANNOT_FIND_WND_CLASS
时获得CreateWindow
。我认为这是预期的。
但是,当我尝试在CreateWindow
中使用该类时,它返回NULL,GetLastError
也是如此。
我可以使用GetWindowsLong(hWnd, GWL_ATOM)
检索从rundll32传递的hInst的窗口类。使用lpClassName,我可以拉出一个装饰窗口减去菜单和加速器,但它有点时髦,因为rundll的窗口类通常只用于它的消息队列。我尝试使用SetWindowsLong
对窗口进行子类化,以替换WndProc
并在我的dll的CallWindowProc
中调用DefWindowProc
而不是WndProc
。
由于无法在MSVC ++ 2010 Express中调试它而受到阻碍。我用适当的条目替换了项目的命令和命令参数,因此它正确启动它,但它抱怨没有rundll32.exe的调试信息,断点等不起作用。
有什么想法吗?我是在正确的轨道上吗?