C#挂钩到另一个dll方法?

时间:2011-04-07 17:10:03

标签: c# sql-server dll

是否可以“附加”到另一个C#dll的方法(没有该dll的源代码)?我的意思是,如果机器上有另一个程序使用该DLL并调用所述方法,我将在我的程序中获得一个事件。

我在使用c#编写的现有应用程序中添加功能时出现问题,我没有源代码。我需要一个额外的表单,当调用程序中的特定方法时会弹出。

程序连接到另一台计算机上的MS SQL数据库。我还在考虑在服务器上创建一个SQL触发器,它会以某种方式与计算机连接并发送某种信号以触发其他形式,但这种情况很糟糕。

[编辑] 或者,我可以在机器上侦听SQL流量吗?如果我发现一个SQL程序的调用伴随着我的程序将采取的dll方法吗?但这不会影响绩效吗?

3 个答案:

答案 0 :(得分:1)

它没有很好的文档记录,我自己仍在试图弄清楚它是如何工作的,但是这里有一个用于挂钩DLL的c#解决方案:EasyHook

答案 1 :(得分:1)

您要执行的操作的术语是Dll Injection。这是关于如何在注入的dll中运行.net代码的tutorial。如果你想要做一个关于做DLL拒绝的介绍,同一个人有一个非常好的第一个定时器教程叫做“How do I build a working poker bot”。这是非常彻底和非常简单的理解。

答案 2 :(得分:0)

如果在“其他”dll中满足某些条件,这是合理的。

  1. 如果“其他”dll具有一种机制,您可以获取对在单独的App域中实例化的对象实例的引用。
  2. 如果您感兴趣的活动可以访问“公开”。
  3. 然后,您可以创建一个委托并将该委托分配给您选择的方法。

    看起来像是:

    var other = OtherDLL.getInstance(InstanceID);
    other.DidSomething += new EventHandler(myDelegate);
    // the += is important so that you are adding your delegate to the existing calls for that method..
    
    //Where you have:
    protected myDelegate(Object sender, EventArgs e)
    {
    // do what you want...
    }
    

    如果公共挂钩不可用,则无法执行此操作。