【问题标题】:A DLL with WinForms that can be launched from A main app可以从主应用程序启动的带有 WinForms 的 DLL
【发布时间】:2022-05-10 03:51:17
【问题描述】:

我创建了一个 C# DLL,其中包含一些表单。 (我需要它是一个 DLL,而不是一个 Windows 应用程序。) 如何将其作为 Windows 应用程序运行?我应该创建另一个应用程序并加载它吗?如何?我需要学习什么才能做到这一点? 请让我知道我是否应该对我的问题进行更多解释。

【问题讨论】:

    标签: c# winforms dll


    【解决方案1】:

    如果您使用的是 VS 2008:

    首先,创建一个 Windows 窗体应用程序项目。如果您不打算使用已创建的默认表单 (Form1.cs),可以将其删除。

    在解决方案资源管理器中,右键单击 References 并选择 Add Reference。这是您添加自定义设计的 C# DLL 的地方。

    现在打开 Program.cs,并进行以下更改:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Windows.Forms;
    using ****your DLL namespace here****
    namespace WindowsFormsApplication2
    {
        static class Program
        {
            /// <summary>
            /// The main entry point for the application.
            /// </summary>
            [STAThread]
            static void Main()
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new [****your startup form (from the DLL) here****]);
            }
        }
    }
    

    如果 DLL 包含断开连接的表单,您可能需要在 winforms 项目中添加一个类来协调表单行为。

    【讨论】:

    • " 如果您不打算使用已创建的默认表单 (Form1.cs),可以将其删除。" ...很好,我不喜欢有一个我实际上并没有使用它的虚拟表单。
    【解决方案2】:

    您可以将表单添加到 DLL,然后在 DLL 中创建一个公共静态函数,该函数使用表单调用 Application.Run

    然后,您可以从 C# 应用程序项目中调用此公共静态方法(在添加对 DLL 的引用之后)。

    【讨论】:

    • 所以在我的新 C# 应用程序中,我应该有一个虚拟表单,它所做的只是调用我的 DLL 中的公共静态函数,对吗?我希望这个新的 C# 只不过是运行该 DLL 的包装器
    • 不,在 program.cs 中的新应用程序中,将 Application.Run(new Form1()); 替换为 Application.Run(new MyDllNamespace.MyDllMainForm()); 不要忘记在项目引用中添加对 dll 的引用。
    【解决方案3】:

    您可以使用RunDll32 启动它,但是您可能需要稍微调整一下 dll 才能工作。您可能需要在入口点放置一个Application.Run。这样您就不需要编译另一个完整的应用程序来使用它。

    以下代码未经测试,但我认为它应该可以工作。

    public static void myDllEntryPoint()
    {
         Application.run(new MyFormInDll());   
    }
    

    运行您的应用程序

    rundll32.exe myDll.dll,myDllEntryPoint
    

    【讨论】:

    • 很酷,但这是我的需要:拥有一种 C# exe 应用程序,它所做的只是作为该 DLL 的包装器来显示它。
    • 我会选择 SLaks 的答案。
    【解决方案4】:

    在 VS2022 (.NET 6.0) 中:

    1. 在其属性中将您的 DLL 项目设置为类库。
    2. 右键单击您的 EXE 项目,然后添加项目参考。
    3. 选择该列表中的一项。

    在初始化后打开表单:

    DLLProject.FormClass myForm = new DLLProject.FormClass();
    myForm.Show(); // or myForm.ShowDialog(), whichever suits you best
    

    在未初始化时打开表单(在 Program.cs 中):

    Application.Run(new DLLProject.FormClass());
    

    记得删除DLL项目中的Program.cs,否则无法编译。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-26
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      • 2021-03-26
      • 2011-12-29
      • 1970-01-01
      相关资源
      最近更新 更多