当我关闭c#应用程序时,在一个DLL中的System.MissingMethodException

时间:2015-08-03 19:09:14

标签: c# dll missingmethodexception

我发现了错误,因为我在Windows内置事件查看器中看到了它:

  

描述:由于未处理的异常,进程终止。   异常信息:System.MissingMethodException   堆:      在Injection.Main.DrawText_Hooked(...)

我有一个使用easyhook的c#应用程序。我的dll关键代码:

        public void Run(RemoteHooking.IContext InContext, String InChannelName)
    {
        // Install system hook to detect calls to DrawTextExW that is made by the client and call the function DrawText_Hooked when ever this happens
        try
        {
            DrawTextExHook = LocalHook.Create(LocalHook.GetProcAddress("user32.dll", "DrawTextExW"), new DDrawTextEx(DrawText_Hooked), this);
            DrawTextExHook.ThreadACL.SetExclusiveACL(new Int32[] { 0 });
        }....

我处理钩子函数的代表是:

        int DrawText_Hooked(...)
    {
            Interface.Read(hdc, lpString, cchText, dwDTFormat);

        return DrawTextExW(hdc, lpString, cchText, ref lprc, dwDTFormat, ref dparams);
    }

当我关闭我的主应用程序时,一切正常,除非我使用Interface.Read(...):在这种情况下,被钩住的应用程序崩溃。我读过它可能是因为Interface.Read(...)一旦我退出应用程序就不再存在但我不知道如何告诉我的dll停止这样做或者只是卸载所以它没有尝试Interface.Read(...)并且发现它不再存在。我该怎么做?

1 个答案:

答案 0 :(得分:0)

两天寻找答案,发布后我在10'后自己发现:

我所做的是宣布钩子静态:

        static LocalHook DrawTextExHook;

因此,从我的主要代码退出时,我可以调用静态方法将其指向null,因此停止调用Interface.Read(...)

        public static void stopIt()
    {
        DrawTextExHook = null;
    }