Visual Studio 2013 DLL 项目:运行 DLL 时不显示对话框窗体

Posted

技术标签:

【中文标题】Visual Studio 2013 DLL 项目:运行 DLL 时不显示对话框窗体【英文标题】:Visual studio 2013 DLL Project: Dialog form not displayed while running the DLL 【发布时间】:2020-09-01 05:18:28 【问题描述】:

我有一个 Visual Studio 2013 C++ DLL 项目。

构建 DLL 工作正常,除了一点:缺少应在 DLL 启动时打开的交互式表单,并且它应该响应/来自 DLL

我曾提到this link

我试过了: 右击项目->选择添加->资源->对话框

之后,Visual Studio 选项卡中出现一个空白对话框,并列在 Resources 文件夹中

    我认为简单地编译项目会在运行 DLL 时显示空对话框。 但是当我运行 DLL 时,即使是空的对话框也不显示

我错过了什么吗?

    另外,C++ 是否足以向表单/对话框添加功能?或者,像 C# 这样的任何其他语言? (以便我可以添加事件处理功能)

【问题讨论】:

1) 窗口和对话框不会自行打开,您需要添加代码才能做到这一点。请参阅Using Dialog Boxes 的概述并决定是否需要模态对话框和非模态对话框,然后您可以找到任何一种情况的代码示例以开始使用。 2) Win32 是一个 C API,所以你当然可以用 C 或 C++ 做任何事情。 @dxiv 谢谢,我也想了解表单 “Forms”不是一个定义明确的术语,“Windows Forms”是一个通常不与 C++ 关联的 .NET 平台。如果你只想要一个基于窗口或对话框的 GUI,有很多 VC++ samples 可以开始。 【参考方案1】:

我建议您可以使用 MFC 为表单/对话框添加功能。

步骤如下:

    创建一个名为“CTestDll”的 MFC DLL,然后选择 Regular DLL using shared MFC DLL

    然后选择Add->Resource->Dialog

    在 CTestDll.cpp 中添加代码

    #include "CTestDlg.h"
    
     extern "C" __declspec(dllexport) void Show()
    
      AFX_MANAGE_STATE(AfxGetStaticModuleState());
      CTestDlg test;
      test.DoModal();
    
    

    创建一个 MFC 应用程序进行测试。您可以通过按钮单击事件调用它。

void CMFCApplication3Dlg::OnBnClickedButton1()

    // TODO: Add your control notification handler code here
    typedef void (WINAPI *TESTDLL)();
    HINSTANCE hInstance = LoadLibrary(_T("CTestDll.dll")); // 
    if (hInstance != NULL)
    
        TESTDLL TestShow = (TESTDLL)GetProcAddress(hInstance, "Show");

        if (TestShow != NULL)
        
            TestShow();
        
        FreeLibrary(hInstance);
    


【讨论】:

以上是关于Visual Studio 2013 DLL 项目:运行 DLL 时不显示对话框窗体的主要内容,如果未能解决你的问题,请参考以下文章

在 Visual Studio 2013 中添加对您自己的 DLL 项目的依赖项/引用

项目在 Visual Studio 2015 PrivateAssemblies 中找不到 dll

使用 Visual Studio 2013 为本机 DLL 正确生成 PDB 文件

使用 Visual Studio 2010 在 dll 项目中包含 Qt 工具

如何从visual studio 2013中禁用mscorlib.dll?

如何在 Visual Studio 2010 中正确引用 dll?