C++ Windows : Access same variable from main process and CallWndProc process

标签 c++ windows hook

我有一个单文件 DLL,它接收 _bstr_t 并将其存储为全局变量,然后为 WH_CALLWNDPROC 过程设置 Windows Hook 。

CallWndProc 函数中,我尝试读取 _bstr_t,但它没有任何值(value)。

我从两个函数打印出变量的地址,它们是不同的。

这并不奇怪,因为我认为 CallWndProc 函数是在不同进程的线程中调用的。

我的问题是,在它们之间共享变量的最简单和最好的方法是什么?

我试图避免必须使用 ATL COM 来存储它以供进程间访问。

示例代码:

// foo.cpp
#include <comutil.h>

static HHOOK g_hook = NULL;
static _bstr_t shared = "";

static LRESULT WINAPI CallWndProc(int nHookCode, WPARAM wParam, LPARAM lParam) {
    if (nHookCode == 12345) {
        // Do something with '_bstr_t shared'
        shared += " bar";
        return 0;
    }
    return CallNextHookEx(g_hook, nHookCode, wParam, lParam);
}

extern "C" __declspec(dllexport) void _stdcall Do(char* someStr, long handle) {
    shared = someStr;

    DWORD threadId = GetWindowThreadProcessId((HWND) handle, &process);
    HINSTANCE hInst = GetModuleHandle("foo.dll");
    g_hook = SetWindowsHookEx(WH_CALLWNDPROC, CallWndProc, hInst, thread);

    // Check value of '_bstr_t shared', or call a COM function to store it somewhere.
    // However, the value of 'shared' does not include the string appended in CallWndProc.
}

额外信息:

  • DLL 由 Java 使用 JNI 调用。
  • DLL 构建为多线程 DLL。

最佳答案

我采用 ATL COM 方法来充当全局值存储。 这不是我理想的解决方案,但可行。

但是,我认为 Hans Passant 对这个问题的评论是一种更好的方法,因为它不需要运行单独的进程。

关于C++ Windows : Access same variable from main process and CallWndProc process,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45516798/

相关文章:

.net - 如何在 .net 中的对象创建过程中添加 Hook

node.js - Mongoose 预删除有效,但不输出 Console.log

c++ - #pragma 弃用基于签名的函数?

C++保存在文件中并最终绘制数据

多进程应用程序中的 SQLite 更新 Hook

windows - 什么是 “Cannot set allocations”错误,由谁发出,我该怎么办?

c++ - 如何在本地 Windows 网络上发现我的应用程序的所有其他实例?

c++ - 第一个客户端在多套接字 winsock 服务器中滞后

c++ - 文件 IO,处理 CRLF

javascript - 如何在Windows 10上启动Edge with Open程序包