Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 易用性与沟通_C#_Dll_Easyhook - Fatal编程技术网

C# 易用性与沟通

C# 易用性与沟通,c#,dll,easyhook,C#,Dll,Easyhook,我使用EasyHook设置了以下结构: 应用程序接口DLL 当我按下应用程序中的按钮时,我试图在注入的DLL中运行一些代码 我使用以下代码设法使DLL向外部发送消息: ((EntryPoint)HookRuntimeInfo.Callback).Interface.WriteLine(""); 但是我如何才能真正使代码在注入的DLL中运行呢?您需要配置一个双向IPC接口。有一系列不同的方法来实现这一点。下面是一个使用.NET远程处理的示例 首先看一下EasyHook,它是创建从DLL向应用程序

我使用EasyHook设置了以下结构:

应用程序接口DLL

当我按下应用程序中的按钮时,我试图在注入的DLL中运行一些代码

我使用以下代码设法使DLL向外部发送消息:

((EntryPoint)HookRuntimeInfo.Callback).Interface.WriteLine("");

但是我如何才能真正使代码在注入的DLL中运行呢?

您需要配置一个双向IPC接口。有一系列不同的方法来实现这一点。下面是一个使用.NET远程处理的示例

首先看一下EasyHook,它是创建从DLL向应用程序发送消息的接口的起点,即应用程序DLL,需要在DLL中配置一个新通道:例如

要从APP->interface->DLL实现IPC,请查看
Disconnect
方法和
Disconnected
事件,该事件位于
CaptureInterface.Disconnect
CaptureInterface.Disconnected
clientcaptureinterface.ventproxy.Disconnected
的“客户端事件”中,都在里面。除了接口类之外,此方法还使用从
MarshalByRefObject
继承的客户端事件代理类,并允许在DLL中的其他位置调用事件处理程序,以响应应用程序调用方法。您需要仔细查看链接的代码,还需要考虑一些其他关注点(如事件处理程序生存期),接口在每个事件周围实现一个包装器,以“安全”的方式触发它

最后,
Disconnected
事件的处理程序附加在DLL的
IEntryPoint
Run方法中:

    _interface.Disconnected += _clientEventProxy.DisconnectedProxyHandler;

    _clientEventProxy.Disconnected += () =>
            {
                // This code in the DLL will run when APP calls CaptureInterface.Disconnect
            };

哇,我已经阅读D3DHook项目好几天了,但一直没有完全理解它,但多亏了你,我才让它开始工作!谢谢你@伊丽莎很高兴这对他有帮助——谢谢你的回答。你能详细解释一下为什么会有ClientCaptureInfereFaceEventProxy吗?简单地使用这些事件处理程序的原始接口有什么困难吗?@Tom'Blue'Piddock处理程序必须从MarshalByRefObj继承,我发现使用代理类更容易,否则您可能会遇到其他与封送处理程序不兼容的类型的问题。
    _interface.Disconnected += _clientEventProxy.DisconnectedProxyHandler;

    _clientEventProxy.Disconnected += () =>
            {
                // This code in the DLL will run when APP calls CaptureInterface.Disconnect
            };