Thanks for your reply. I did the following but still not working,
probably I
handle the variables incorrectly. Can help me identify them?
Hook.cpp
#pragma data_seg(".SHARDAT")
TCHAR szData[10]=_T("");
initialize a compound such as an array. Data in shared segments has to be
#pragma data_seg()
LRESULT __declspec(dllexport)__stdcall CALLBACK KeyboardProc(int nCode,
WPARAM wParam, LPARAM lParam)
{
CString strTxt = szData;
:
}
BOOL __declspec(dllexport)__stdcall InstallHook(LPCTSTR lpExternalData)
{
_tcscpy(szData, lpExternalData);
:
}
CDlg.cpp
void CDlg::Hook(LPCTSTR lpData)
{
static HINSTANCE hinstDLL = LoadLibrary(_T("Hook.dll"));
typedef BOOL (CALLBACK *inshook)(LPCTSTR);
inshook instkbhook = (inshook)GetProcAddress(hinstDLL, "InstallHook");
instkbhook(lpData);
ShowWindow(SW_MINIMIZE);
}
"Alex Blekhman" wrote:
"cleohm" wrote:
Thanks for your reply. The following list 2 codes
(Hook.cpp and CDlg.cpp):
Hook.cpp
#pragma data_seg(".SHARDAT")
static HHOOK hkb=NULL;
LPCTSTR lpData=_T("");
#pragma data_seg()
LRESULT __declspec(dllexport)__stdcall CALLBACK
KeyboardProc(int nCode,
WPARAM wParam, LPARAM lParam)
{
// Require the use of lpData here
return CallNextHookEx(hkb, nCode, wParam, lParam);
}
Just reread KB article KB100634 again.
<quote>
NOTE: If the block contains pointers, this can be a problem.
If the pointer holds the address of a variable not in the
shared data segment, this address is valid only in one
process space.
</quote>
You need to use shared array if you want to share whole
string:
#pragma data_seg(".SHARDAT")
TCHAR szData[42] = { 0 };
#pragma data_seg()
Alex