大侠请进:CE下两个应用程序怎么通信?

happyplan 2009-03-09 06:14:37
请问在CE平台上怎么完成两个应用程序的数据通信呢?

应用背景:
应用程序A(C#代码)在运行时会开启应用程序B(C++代码),即程序B覆盖在A之上。
之后会时不时的向B发送视频数据,B收到数据后做解码并显示出来。
问题是A如何向B发送数据呢?

已经做的尝试:
1、B不是以独立的程序出现,而是封装成dll,然后由A调用,这样就不存在不相关进程之间传递数据的问题了。
但是因为B所要实现的解码功能调用了N多.h文件和.lib文件,而A程序是基于C#的,不能之间使用.h和.lib,必须都要封装成dll,可是我没弄清楚把.h和.lib封装成dll,故放弃了这种方法...

2、采用WM_COPYDATA在两个应用程序间传递数据。
此方法中发送调用了SendMessage函数,接收重载了WndProc。
但是在CE下C++中不支持SendMessage中的某个参数形式,而C#下又无法重载WndProc,得用WndProcHooker,这有涉及到了挂钩技术...我看了半天也是一头雾水

故强烈请求大侠给支招!!
貌似方法1还是比较简单的,但是我用VC++怎么封装.h和.lib呢?是不是封装完后还有再重新封装dll,因为原来的dll是基于原始的.h和.lib而不是封装成dll的.h和.lib(说的好绕啊,不知道大家明白没...)
...全文
227 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
paul_chao 2009-03-26
  • 打赏
  • 举报
回复
運氣不錯, 剛好看到, 卓參吧

"Interprocess Communication with the .NET Compact Framework 1.0"
http://msdn.microsoft.com/en-us/library/aa446520.aspx

Paul, Chao @ Techware
AlexChan1981 2009-03-26
  • 打赏
  • 举报
回复
内存映射是不错的选择,不容易出错。
jw212 2009-03-25
  • 打赏
  • 举报
回复
SendMessage 貌似最简单吧
xajhuang 2009-03-25
  • 打赏
  • 举报
回复
还有招,内存映射文件
Jacky_Dai 2009-03-25
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 constantine 的回复:]
引用 12 楼 lijinyan3000 的回复:
菜鸟中,路过学习,只简单使用过COMPYDATA,传递数据,觉得这样最方便.

windows中进程通讯的方法:
方法一:WM_COPYDATA
HWND  hReceiveDataWindow  =  FindWindow(NULL,....)
COPYDATASTRUCT  data;
data.cbdata  =  strlen(pStr);
data.lpData  =  pStr;
SendMessage(hReceiveDataWindow  ,WM_COPYDATA,(WPARAM)GetFocus(),(LPARAM)&data);

REF.最简单的方式
http://www.cppblog.com…
[/Quote]
FindWindow SendMessage我组合使用过,在WinCE下面使用没有问题,只是传入的参数有所差异,可以试试,c++的用法
Jacky_Dai 2009-03-25
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 xqhrs232 的回复:]
事件与消息
[/Quote]
这个比较适合c++
wjf_zjut 2009-03-19
  • 打赏
  • 举报
回复
原来有这么多方法!
renjiao17 2009-03-19
  • 打赏
  • 举报
回复
学习
constantine 2009-03-19
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 lijinyan3000 的回复:]
菜鸟中,路过学习,只简单使用过COMPYDATA,传递数据,觉得这样最方便.

windows中进程通讯的方法:
方法一:WM_COPYDATA
HWND hReceiveDataWindow = FindWindow(NULL,....)
COPYDATASTRUCT data;
data.cbdata = strlen(pStr);
data.lpData = pStr;
SendMessage(hReceiveDataWindow ,WM_COPYDATA,(WPARAM)GetFocus(),(LPARAM)&data);

REF.最简单的方式
http://www.cppblog.com/TechLab…
[/Quote]

windows上能用的方法wince不一定能用!!!
gooogleman 2009-03-19
  • 打赏
  • 举报
回复
学习了,

setevent
papapa123123 2009-03-19
  • 打赏
  • 举报
回复
总结的很好啊。。学习了:)
lijinyan3000 2009-03-16
  • 打赏
  • 举报
回复
菜鸟中,路过学习,只简单使用过COMPYDATA,传递数据,觉得这样最方便.

windows中进程通讯的方法:
方法一:WM_COPYDATA
HWND hReceiveDataWindow = FindWindow(NULL,....)
COPYDATASTRUCT data;
data.cbdata = strlen(pStr);
data.lpData = pStr;
SendMessage(hReceiveDataWindow ,WM_COPYDATA,(WPARAM)GetFocus(),(LPARAM)&data);

REF.最简单的方式
http://www.cppblog.com/TechLab/archive/2005/12/30/2272.aspx

方法二:dll共享
#pragma data_seg (".ASHARE")
int iWhatYouUseInTwo = 0;
#pragma data_seg()

方法三:映象文件
CreateFileMapping

REF.最基础,效率最高的方法
最好的参考书《Windows核心编程》第17章 内存映射文件
http://blog.codingnow.com/2005/10/interprocess_communications.html


方法四:匿名管道:CreatePipe

方法五:命名管道:createnamedpipe

REF.
http://www.pediy.com/bbshtml/bbs8/pediy8-724.htm


方法六:邮件通道
createmailslot

方法七:网络接口,socket,但要求有网卡。可以实现不同主机间的IPC

另一篇总结的比较好的文章
http://www.seeitco.com/doc/Html/Visual%20C++/205637623.html

happyplan 2009-03-16
  • 打赏
  • 举报
回复
曙光同学能不能详细说一下COPYdata呢?
我试过在Window下用COPYdata成功的,程序A向程序B发送消息,B能收到。
但是因为ce下不支持对WndProc的重载,需要先继承一个MessageWindow类,再重载WndProc方法,但是我这样写了程序C后发现,虽然程序A向C发送信息成功,但C貌似没有收到,没有任何反应,我百思不得其解,所以就只好放弃了这个办法

另外,关于CE下共享内存的方法,还存在一个进程间同步的问题,一个应用程序在对某块内存进行写操作的时候,不希望另一个程序对同一块区域进行读操作。本来想用Semaphore,但发现ce下不支持。而我理解lock,ManulResetEvent那些同步方法,好像又是针对同一进程的不同线程的同步,对两个独立的应用程序间的内存同步是不是起不到作用呢?

还望大家解惑!谢谢!
David_Hu 2009-03-13
  • 打赏
  • 举报
回复
高深,mark
xajhuang 2009-03-13
  • 打赏
  • 举报
回复
COPYDATA 完全可用的, 实在不行就用内存映射文件好了
xqhrs232 2009-03-12
  • 打赏
  • 举报
回复
事件机制跟C++/C#语言无关
happyplan 2009-03-11
  • 打赏
  • 举报
回复
我今天又试了共享内存的方法,但发现还是需要一个消息机制让程序A告知程序B去读数据,已经B通知A数据已读完。

方法可能有:
1、还是COPYDATA:Ce上实现较难,因为.net cf把好多东西都精简掉了,暂时不考虑
2、事件:我只是比较熟悉C#下的事件机制,不知道一个C#程序和一个C++程序之间怎么传递事件,难道说只负责发出去,对方是C#还是C++程序都无所?

PS:我还是不死心将B封装成dll或者com这种方法,想请问大家把C++的例如ffmepg的sdk封装成dll或者com后,还需要.h和.lib吗?我只想要dll或者com在C#中使用,而.h那些C#是不能用的呀!

烦请大家继续指点!!
xqhrs232 2009-03-10
  • 打赏
  • 举报
回复
事件与消息
91program 2009-03-10
  • 打赏
  • 举报
回复
和PC上进程之间通讯差不多,这方面的文章网上还是比较多的
Ei 2009-03-09
  • 打赏
  • 举报
回复
剪切板 com组件
加载更多回复(3)

19,500

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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