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.
}
额外信息:
- DLL 由 Java 使用 JNI 调用。 DLL
- 是作为多线程 DLL 构建的。
我使用了ATL COM方法作为全局值存储。 不是我理想的解决方案,但可行的解决方案。
但是,我认为Hans Passant对这个问题的评论是一种更好的方法,因为它不需要运行单独的进程。
相关文章:
- 为什么 Windows 拒绝访问某些进程的名称?
- 从根权限进程创建可访问的文件
- 使用加速进程间创建消息队列 - 内存访问冲突
- C++ Windows:从主进程和 CallWndProc 进程访问相同的变量
- 为什么创建进程 API 调用会导致内存访问冲突?
- 如何:监视Windows中另一个进程的文件访问?
- 进程退出,返回值3221225477访问多维向量
- 确定打开进程的内存访问位置
- 通过进程模块C 枚举时,访问被拒绝
- 如何在 Python 进程中访问由C++进程创建的互斥锁
- 尝试启动另一个进程并通过 MPI 加入它,但获得访问冲突
- 在不违反严格的别名规则的情况下访问进程间共享内存中的对象
- 对关键部分的两个进程访问出错
- 如何确保一次只有一个进程访问共享内存
- 如何创建可由多个进程访问的共享内存段
- 从另一个进程访问STA对象时出现问题
- 从32位进程访问64位ODBC
- 在 64 位(或 32 位)Windows 上以 32 位进程访问 >3,3,4GB 文件
- 使用c++从32位进程访问64位dll
- 如何通过多个进程 C/C++ 访问同一变量