我们有一个可以从GUI中受益的命令行应用程序。我们想要添加一些绘图功能,并确定了一个使用MFC的绘图库。最初我们开发了一个单独的应用程序,但我们宁愿在同一个进程空间中使用GUI。
我在考虑可能在生产应用程序和测试应用程序中托管的MFC DLL中的GUI。
问题是:
修改
我应该补充一点,这是一个非托管应用程序(需要保持这种状态 - 它需要高性能,广泛使用模板,提升,自定义分配器,内部开发的线程序列化等)
结果:
Nick D的回答很有效 - especially the follow-up link in his comment with the details about a regular MFC DLL。
请注意,我们将在下一次迭代中使用Qt。这次修改我们的构建环境并习惯了一个新的框架,这太过分了。
答案 0 :(得分:3)
您可以在dll中调用/重用GUI代码。 (我甚至在我的C ++项目中使用Delphi表单)
一个非常简单的dll示例:
// The DLL exports foo() function
void foo()
{
AFX_MANAGE_STATE( AfxGetStaticModuleState() );
CDlgFoo dlg;
dlg.DoModal();
}
在控制台程序中,您将拥有以下代码:
h = ::LoadLibrary( "my.dll" );
::DisableThreadLibraryCalls( h );
pfoo = (foo_type*)::GetProcAddress( h, (const char*)1 );
if ( pfoo ) pfoo();
答案 1 :(得分:2)
首先,你必须放弃WinMain()。
如果您仍想保留命令行参数功能,请在App类的InitInstance()中处理命令参数。
答案 2 :(得分:1)
直接的方法是在您的程序中添加一个开关,并给定一定值,它将启动gui,否则使用命令行选项。像“app.exe -mode = gui”之类的东西。如果在程序启动时没有看到此命令arg,则回退到旧的命令行行为。
关于DLL,您可以在DLL中编写所有UI功能,并在“生产应用程序”中使用它,您可以在其中运行消息循环和WinMain。但重点是什么?如果它是出于测试目的,为什么不将表示与逻辑分开并单独测试逻辑。您打算如何测试测试应用程序中的UI?模拟按钮点击?