阅读:1605回复:3
远程线程执行体中值的传递问题
// 远程线程执行体
DWORD __stdcall ThreadProc(RemotePara *Para){ typedef int (__stdcall *PMessageBox) ( HWND , LPCTSTR , LPCTSTR , UINT ); PMessageBox MessageBoxFunc = (PMessageBox)Para->dwMessageBox; /* 问题是 我要在这里更改Para->strMessageBox中的值,应该使用什么函数或者方法呢 我使用 strcpy(Para->strMessageBox,"abc"); 执行后出现引用内存出错,望大家帮助帮助 */ MessageBoxFunc(NULL, Para->strMessageBox, Para->strMessageBox, MB_OK); return 0 ; } |
|
沙发#
发布于:2007-03-22 16:10
问一下楼主,你在远程线程中开辟存储代码和数据的空间了吗
你那个字符串的地址是本地的还是远程线程的啊 |
|
板凳#
发布于:2007-03-23 20:47
引用第1楼readilen于2007-03-22 16:10发表的“”: 已经开辟了存储空间了 // 在远程进程地址空间分配虚拟内存 pRemoteThread = VirtualAllocEx(hRemoteProcess, 0, THREADSIZE, MEM_COMMIT | MEM_RESERVE,PAGE_EXECUTE_READWRITE); if(!pRemoteThread)return 0; // 将线程执行体ThreadProc写入远程进程 if(!WriteProcessMemory(hRemoteProcess, pRemoteThread, &ThreadProc, THREADSIZE,0))return 0; |
|
地板#
发布于:2007-03-23 22:44
不知道你是哪里出的问题,少量的进程间数据通讯,你可以试试使用永久变量的方法(文件或注册表等)。如果数据可能需要实时更改,则通过文件传递数据,用消息通知。对文件操作有很简单的API,不会给程序增加代码负担,还利于多进程调试,查查GetPrivateProfileString。
|
|