如何将变量从windows窗体项目传递到dll项目

本文关键字:项目 dll 窗体 windows 变量 | 更新日期: 2023-09-27 18:21:39

在一个解决方案中,我有两个项目,一个是dll项目,第二个是windows窗体。在form1中的windows窗体项目中,我可以调用dll项目中的方法,例如:

在表格1顶部:

Capture.Hook.DX11.DXOverlayEngine overlayengine;

在构造函数中:

overlayengine = new Capture.Hook.DX11.DXOverlayEngine();

然后在构造函数中,我可以制作:

overlayengine.Draw();

在Draw()方法中的项目dll中,有两条线可以绘制:

_spriteEngine.DrawString(textElement.Location.X + 1800, textElement.Location.Y, textElement.Text, textElement.Color.R, textElement.Color.G, textElement.Color.B, textElement.Color.A, font);
                            _spriteEngine.DrawString(textElement.Location.X + 1800, textElement.Location.Y + 25,
                                              DateTime.Now.ToString("h:mm tt"),textElement.Color.R, textElement.Color.G, textElement.Color.B, textElement.Color.A, font);

这就是我现在所做的:

在dll项目(库类型项目)中,我在顶部添加了:

public bool DrawEnabled { get; set; }

然后在Draw()方法中我做了:

if (DrawEnabled == true)
                            {
                                _spriteEngine.DrawString(textElement.Location.X + 1800, textElement.Location.Y, textElement.Text, textElement.Color.R, textElement.Color.G, textElement.Color.B, textElement.Color.A, font);
                                _spriteEngine.DrawString(textElement.Location.X + 1800, textElement.Location.Y + 25,
                                                  DateTime.Now.ToString("h:mm tt"), textElement.Color.R, textElement.Color.G, textElement.Color.B, textElement.Color.A, font);
                            }

然后在form1中,我在顶部做了:

Capture.Hook.DX11.DXOverlayEngine overlayengine;

然后在form1构造函数中:

overlayengine = new Capture.Hook.DX11.DXOverlayEngine();
overlayengine.DrawEnabled = false;

然后在表格1中的按钮点击事件中,我做了:

void gkh_KeyDown(object sender, KeyEventArgs e)
        {
            overlayengine.DrawEnabled = true;
        }

我使用了一个断点,它正在获取和执行overlayengine。DrawEnabled=true;但当我按键时,我看不到任何地方的图纸。

怎么了?

如何将变量从windows窗体项目传递到dll项目

与其将布尔标志添加到Form1,不如将其添加到DxOverlayEngine,并在库的Draw()实现中检查本地布尔标志,以在设置为false时绕过必要的行。

然后除了绘制之外,还向库中添加访问器方法,例如

void SetDrawEnabled(bool enable)
bool GetDrawEnabled();

在C#中,您可以使用公共属性来完成同样的事情。

public bool DrawEnabled { get; set; }

单击Form1上的按钮时,请适当更改DrawEnabled状态。在SetDrawEnabled中,在适当的状态转换(无效)时调用Draw()。

实现这一点的一种方法是每次设置DrawEnabled的值时直接调用Draw()。

private bool _drawEnabled = false;
public bool DrawEnabled 
{
    get { return _drawEnabled; }
    set { _drawEnabled=value; Draw(); }
}

您可以在点击事件处理程序中调用Draw方法

private void button1_Click(object sender, System.EventArgs e)
{
  overlayengine.Draw();
}

希望这对你有帮助。

我不确定你的要求是什么,但因为听起来你引用了winforms项目中的DLL,所以你有两个项目的源代码。

为什么不为接受bool的draw方法添加一个重载呢?然后从重载中调用原始方法。

既然你在winform中做出了bool决定,然后调用了draw方法,为什么不直接决定从表单中调用或不调用draw方法呢?

还是我完全没有抓住这个问题的要点?