2013-02-20 110 views
0

我想在C#中使用EasyHook,以正確地從COM對象(非託管)鉤入方法。處理掛鉤函數

我能夠確定COM對象的方法的地址,我可以正確地觸發我的鉤子函數。我就是這麼做的,作爲代碼的其餘部分幾乎類似於一個教程:

SendHook = LocalHook.Create(0x12345678, new DMyFunc(MyFunc_Hooked), this); 

但是,一旦我的鉤子裏,所有的參數都炒(它們不等於那些我原本通過)。另外,我不能返回任何東西(請注意,我也嘗試掛鉤另一個函數,返回一個短的值,並且該值不能正確返回)。

當我打開EXESCOPE,這是函數簽名之一:

function MyFunc(out ParamA:^BSTR; out ParamB:^bool): ^TypeA; 

而這種功能具有以下簽名的時候我在C#中通常使用的COM對象:

TypeA MyFunc(ref string ParamA, ref bool ParamB); 

任何想法?提前致謝!

+2

您是否正在考慮作爲COM對象指針的第一個參數?在這裏看到一個COM調用的例子:http://www.codeproject.com/Articles/13601/COM-in-plain-C – 2013-02-20 17:34:00

+0

我不知道,但肯定我會把這個輸入帳戶,謝謝!!!!! – 2013-02-20 18:00:40

回答

1

在閱讀Dark Falcon提供的文章5分鐘後,我設法解決了這個問題。我完全推薦閱讀它!因此,所有的答案都歸功於他!

+0

你好,很遺憾,這篇文章解釋並不那麼容易。這是一篇初學者文章,讓所有複雜的東西旁邊。而且COM非常棒!複雜。我注意到在COM接口上設置一個鉤子會直接進入地獄。我發現我的鉤子最終被設置在遠程過程調用運行時的包裝對象中! (Rpcrt4.dll)而不是我想要掛鉤的函數。導致鉤從不被稱爲甚至崩潰! – Elmue 2014-02-02 18:19:30