shenyingj
驱动牛犊
驱动牛犊
  • 注册日期2007-01-23
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望16点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
阅读:1605回复:3

远程线程执行体中值的传递问题

楼主#
更多 发布于:2007-03-21 18:00
  // 远程线程执行体
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 ;
}
readilen
驱动牛犊
驱动牛犊
  • 注册日期2007-03-16
  • 最后登录2012-12-18
  • 粉丝0
  • 关注0
  • 积分637分
  • 威望78点
  • 贡献值0点
  • 好评度63点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-03-22 16:10
问一下楼主,你在远程线程中开辟存储代码和数据的空间了吗
你那个字符串的地址是本地的还是远程线程的啊
shenyingj
驱动牛犊
驱动牛犊
  • 注册日期2007-01-23
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望16点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-03-23 20:47
引用第1楼readilen2007-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;
ytwei
驱动小牛
驱动小牛
  • 注册日期2005-04-01
  • 最后登录2010-07-30
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望102点
  • 贡献值0点
  • 好评度85点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-03-23 22:44
不知道你是哪里出的问题,少量的进程间数据通讯,你可以试试使用永久变量的方法(文件或注册表等)。如果数据可能需要实时更改,则通过文件传递数据,用消息通知。对文件操作有很简单的API,不会给程序增加代码负担,还利于多进程调试,查查GetPrivateProfileString。
游客

返回顶部