C++ DLL(本地挂钩)和 C# 应用程序之间合适的 IPC
Suitable IPC between a C++ DLL (local hooks) and C# application
对于注入第三方进程和 C# 应用程序的 C++ DLL,最好的进程间通信是什么?这是目前的情况:
// This gets executed within the target process memory region
LRESULT CALLBACK HookProc(int code, WPARAM wParam, LPARAM lParam)
{
if (code > 0)
{
auto csharpApplicationFunctionPointerAddress = 0xdeadbeef;
auto csharpApplicationFunctionResult = call csharp function with N parameters here
// Do something with the result
if (csharpApplicationFunctionResult == "foo")
{
}
}
return CallNextHookEx(hookInstance, code, wParam, lParam);
}
我遇到了 并发现我需要一个 RPC,但是我似乎找不到最适合这个问题的 RPC,因为该通信需要传递 N 个参数并获取尽快返回结果。
备注:
- 套接字不在意,因为我不想处理超时
- 命名管道在这里工作还是只建议用于字符串消息?(serialization/deserialization 不在意)
- 我不想使用远程线程的消息轮询,因为这使用太多 CPU
还有其他选择吗?请随时纠正我上面的注释。
我最终创建了一个 作为中心点,通过来自 DLL 的 SendMessage
调用接收消息。
对于注入第三方进程和 C# 应用程序的 C++ DLL,最好的进程间通信是什么?这是目前的情况:
// This gets executed within the target process memory region
LRESULT CALLBACK HookProc(int code, WPARAM wParam, LPARAM lParam)
{
if (code > 0)
{
auto csharpApplicationFunctionPointerAddress = 0xdeadbeef;
auto csharpApplicationFunctionResult = call csharp function with N parameters here
// Do something with the result
if (csharpApplicationFunctionResult == "foo")
{
}
}
return CallNextHookEx(hookInstance, code, wParam, lParam);
}
我遇到了
备注:
- 套接字不在意,因为我不想处理超时
- 命名管道在这里工作还是只建议用于字符串消息?(serialization/deserialization 不在意)
- 我不想使用远程线程的消息轮询,因为这使用太多 CPU
还有其他选择吗?请随时纠正我上面的注释。
我最终创建了一个 SendMessage
调用接收消息。