1
我有一个单文件DLL接收并存储作为全局变量的_bstr_t
,然后为WH_CALLWNDPROC
过程设置Windows钩子。C++ Windows:从主进程和CallWndProc进程访问相同的变量
在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方法。 – KilloWatt