外部应用程序在使用easyhook和一个函数从dll发送到我的c#代码后崩溃

时间:2015-08-02 23:03:35

标签: c# dll crash easyhook

我正在使用easyhook,在退出我的应用程序后,被钩住的那个崩溃了。我知道它发生在哪里但不知道如何解决它。我正在挂钩DrawText。我什么都不做:

        int DrawText_Hooked(IntPtr hdc, [In, Out, MarshalAs(UnmanagedType.LPTStr)] string lpString, int cchText, [In, Out, MarshalAs(UnmanagedType.Struct)] ref RECT lprc, uint dwDTFormat, [In, Out, MarshalAs(UnmanagedType.Struct)] ref DRAWTEXTPARAMS dparams)
    {
        //Interface.Read(hdc, lpString, cchText, dwDTFormat);
        return DrawTextExW(hdc, lpString, cchText, ref lprc, dwDTFormat, ref dparams);
    }

但如果我取消注释Interface.Read(...),当我退出我的c#程序时,它会崩溃我的钩子应用程序(否则它完美无缺)。

该函数在我的c#代码中,并且看起来像这样:

        public class interfaceA : MarshalByRefObject
    {
        public void ReportException(Exception InInfo)
        {
        }
        public void Ping()
        {
        }
        public void Read(IntPtr hdc, string lpString, int cchText, uint dwDTFormat)
        {
            Console.WriteLine(lpString);
        }
    }

如何防止此外部应用程序崩溃?或者如何在没有此问题的情况下将信息从我的dll发送到c#代码?

由于

2 个答案:

答案 0 :(得分:0)

我不知道为什么会发生这种情况,经过进一步调查后,一旦我知道它是什么错误,我就得到了答案。在完全解决之前我问了另一个问题,这里是链接:

System.MissingMethodException in a dll when I shut down c# application

答案 1 :(得分:0)

老问题,但万一有人偶然发现这个寻找答案。

崩溃的实际原因是当您关闭C#程序时关闭IPC服务器,因此尝试访问MyClass3对象将失败。

要修复在Interface.Read调用周围使用Interface,或在退出承载IPC服务器的C#程序之前通过信令禁用挂钩(卸载)。