两个控制台应用程序能传递消息么?

unhappyless 2009-02-04 11:04:28
大概要模拟的意思:
int main()
{
int a =0; //这值经常变化的
}


在另一个工程里
int main()
{
cout<<a; //我要怎么得到这个 a 值
}
...全文
279 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
crushor 2009-02-05
  • 打赏
  • 举报
回复
服务器端


#include "stdafx.h"
#include <windows.h>
#include <iostream>
using namespace std;

int main(int argc, char* argv[])
{
cout<<"server start ..."<<endl;
MSG msg;
while(GetMessage(&msg,NULL,0,0))
{
if(WM_USER+1000 == msg.message)
{
cout<<"get client msg and parameter is "<<msg.lParam<<endl;
}
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
}
cout<<"server exit ..."<<endl;
return 0;
}


客户端,注意我的服务器端是叫myserver的



#include "stdafx.h"
#include <Windows.h>
#include <Tlhelp32.h>
#include <iostream>

using namespace std;
int main(int argc, char* argv[])
{
HANDLE hProcess = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
PROCESSENTRY32 info;
info.dwSize = sizeof(PROCESSENTRY32);
BOOL bGetmore = Process32First(hProcess,&info);
BOOL bfind = FALSE;
DWORD taget = 0;

while(bGetmore && !bfind)
{
if(0==strcmp("myserver.exe",info.szExeFile))
{
cout<<"process id "<<info.th32ProcessID<<endl;
HANDLE hModule = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD,0);
THREADENTRY32 tinfo;
tinfo.dwSize = sizeof(THREADENTRY32);
bGetmore = Thread32First(hModule, &tinfo);
while(bGetmore)
{
if(info.th32ProcessID==tinfo.th32OwnerProcessID)
{
cout<<"thread id is "<<tinfo.th32ThreadID<<endl;
bfind = TRUE;
taget = tinfo.th32ThreadID;
break;
}
bGetmore = Thread32Next(hModule,&tinfo);
}
CloseHandle(hModule);
break;
}
bGetmore = Process32Next(hProcess, &info);
}
CloseHandle(hProcess);
if(!bfind)
{
return 0;
}
int i = 0;
while(1)
{
if(::PostThreadMessage(taget,WM_USER+1000,0,++i))
{
cout<<"send message "<<i<<endl;
}
else
{
cout<<"fail at "<<i<<","<<GetLastError()<<endl;
}
Sleep(1000);
}
return 0;
}



crushor 2009-02-05
  • 打赏
  • 举报
回复
deerwin1986 2009-02-04
  • 打赏
  • 举报
回复
Windows核心编程
全是这方面的内容...
kostion 2009-02-04
  • 打赏
  • 举报
回复
当然有了,pipe(通道),看看这方面的东西吧,不错
九桔猫 2009-02-04
  • 打赏
  • 举报
回复
不同机器的话,肯定要用网络的

Windows核心编程 上有进程间通信方法总结,楼主多看看。
old-six-programmer 2009-02-04
  • 打赏
  • 举报
回复
如果是同一台主机上不同进程那就建立进程间通信
如果不是同一台主机上的进程间通信那就建立网络通信

至于进程间通信
网上搜一下,一堆一堆
unhappyless 2009-02-04
  • 打赏
  • 举报
回复
除了 socket 没其法了?
kostion 2009-02-04
  • 打赏
  • 举报
回复
当然可以了,控制台工程也是工程,两个应用程序之间可以,控制台程序一样可以,只不过用什么方法了,建议socket,两端理论上是C/S,也可以认为是平等级别关系。
xxweilw 2009-02-04
  • 打赏
  • 举报
回复
建立网络通信吧
unhappyless 2009-02-04
  • 打赏
  • 举报
回复
有没有模拟消息的机制,靠消息通知
wyc761024 2009-02-04
  • 打赏
  • 举报
回复
可以使用CreateFileMapping建一个有名的内存映射,然后再需要访问的程序再使用OpenFileMapping打开这个有名的内存映射.
unhappyless 2009-02-04
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 woshidahuaidan1986 的回复:]
我觉得用读写文件的方式可以实现
[/Quote]

不可能一直读写文件的,太耗资源了。要是能模拟windows消息系统就好了
woshidahuaidan1986 2009-02-04
  • 打赏
  • 举报
回复
我觉得用读写文件的方式可以实现
yang1216 2009-02-04
  • 打赏
  • 举报
回复
等高手来回答。
unhappyless 2009-02-04
  • 打赏
  • 举报
回复
[size=36px]主要就是控制台程序没有hWnd,所以Windows 的东西用不上[/size]
叶落寒山 2009-02-04
  • 打赏
  • 举报
回复
进程间通信不能像线程一样,通过发消息的形式进行。

可以用进程间的通信方式,如pipe(管道)或者共享内存等。
可以在网上搜搜这方面的资料。
cppzhentan 2009-02-04
  • 打赏
  • 举报
回复
有N多方法,读写共享内存.通道.消息....等等

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧