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