【发布时间】:2022-05-10 03:51:17
【问题描述】:
我创建了一个 C# DLL,其中包含一些表单。 (我需要它是一个 DLL,而不是一个 Windows 应用程序。) 如何将其作为 Windows 应用程序运行?我应该创建另一个应用程序并加载它吗?如何?我需要学习什么才能做到这一点? 请让我知道我是否应该对我的问题进行更多解释。
【问题讨论】:
我创建了一个 C# DLL,其中包含一些表单。 (我需要它是一个 DLL,而不是一个 Windows 应用程序。) 如何将其作为 Windows 应用程序运行?我应该创建另一个应用程序并加载它吗?如何?我需要学习什么才能做到这一点? 请让我知道我是否应该对我的问题进行更多解释。
【问题讨论】:
如果您使用的是 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 项目中添加一个类来协调表单行为。
【讨论】:
您可以将表单添加到 DLL,然后在 DLL 中创建一个公共静态函数,该函数使用表单调用 Application.Run。
然后,您可以从 C# 应用程序项目中调用此公共静态方法(在添加对 DLL 的引用之后)。
【讨论】:
Application.Run(new Form1()); 替换为 Application.Run(new MyDllNamespace.MyDllMainForm()); 不要忘记在项目引用中添加对 dll 的引用。
您可以使用RunDll32 启动它,但是您可能需要稍微调整一下 dll 才能工作。您可能需要在入口点放置一个Application.Run。这样您就不需要编译另一个完整的应用程序来使用它。
以下代码未经测试,但我认为它应该可以工作。
public static void myDllEntryPoint()
{
Application.run(new MyFormInDll());
}
运行您的应用程序
rundll32.exe myDll.dll,myDllEntryPoint
【讨论】:
在 VS2022 (.NET 6.0) 中:
在初始化后打开表单:
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,否则无法编译。
【讨论】: