繁体   English   中英

C ++ Windows:从主进程和CallWndProc进程访问相同的变量

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

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

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

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

这并不奇怪,因为我认为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.
}

额外信息:

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

我使用ATL COM方法充当全球价值存储。 不是我理想的解决方案,而是可行的解决方案。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM