2011-04-07 80 views
1

是否有可能「附加」到另一個C#DLL的方法(沒有該DLL的來源)?我的意思是,如果在使用該dll的計算機上有另一個程序,並且調用了該方法,我將在程序中獲得一個事件。C#掛鉤到另一個dlls方法?

我在將函數添加到用c#編寫的現有應用程序中並且沒有源代碼時遇到問題。我需要一個額外的表單,當程序調用特定的方法時會彈出。

程序連接到不同機器上的MS SQL數據庫。我也在考慮在服務器上創建一個SQL觸發器,它可以以某種方式與計算機連接併發送某種信號來觸發附加的表單,但是失敗的情況很糟糕。

[編輯] 或者我可以在機器上偵聽SQL流量,如果我找到一個伴隨該dll方法的SQL過程的調用,我的程序將會執行?但是這不會影響性能嗎?

+1

爲什麼你沒有源?這不是你/你的組織寫的東西嗎? – 2011-04-07 17:13:40

+0

我正在部署由我們的業務合作伙伴創建的程序。我沒有資源,他們沒有時間爲最終客戶做出這樣的調整,所以我必須採取行動。 – lipman 2011-04-07 17:22:25

回答

1

它不是有據可查的,我自己也仍在試圖弄清楚它是如何真正起作用的,但這裏是一個C#解決方案掛接到DLL文件:EasyHook

1

您想要的動作術語做的是Dll Injection。這是一個tutorial關於如何讓你的.net代碼在注入的dll中運行。如果你想做一個關於做DLL注入的介紹,同一個人有一個非常好的名爲「How do I build a working poker bot」的第一次定時器教程。這是非常徹底,非常簡單的理解。

0

這是合理的,如果某些條件在「其他」dll中得到滿足。

  1. 如果「其他」dll有一種機制讓您獲得對在單獨的應用程序域中實例化的對象實例的引用。
  2. 如果您感興趣的活動有訪問權限「公開」。

然後,您可以創建委託並將該委託分配給您選擇的方法。

它看起來是這樣的:

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... 
} 

如果公衆鉤不可用,那麼你就不能做到這一點。