请高手指点WINCE上几个进程共同使用DLL封装的串口通讯

hnhyhongmingjiang 2011-05-09 05:35:24
^_^,最近要用到多个进程共用一个串口进行通讯。
我暂时想的是用DLL封装一个串口通讯,因为是第一次,呵呵,怕走弯路
但是这里有几点疑问想请高手指点
1:在DLL里面有一个Creatfile打开串口的一个函数,如果被几个进程同时加载这个DLL。会不会引起冲突
2:如果再这个DLL封装的串口通讯里面有调用一个串口接受数据的线程。在几个使用这个DLL的进程里,这个线程的数据处理函数会有冲突么
呵呵,反正头脑比较乱,有高手能指点下,给个比较好的思路在DLL封装一个串口通讯,而多个进程可以共用这个DLL并且对同一个串口进行读写操作
...全文
138 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
hnhyhongmingjiang 2011-05-16
  • 打赏
  • 举报
回复
上面那个在WINDOWS上可以
hnhyhongmingjiang 2011-05-16
  • 打赏
  • 举报
回复
COM串口对象的进程之间继承/共享---这个方法不知道有人在WINCE上实验过没


1、首先创建可以继承/共享的串口对象

HANDLE CreateFile(

LPCTSTR lpFileName,

DWORD dwDesiredAccess,

DWORD dwShareMode,

LPSECURITY_ATTRIBUTES lpSecurityAttributes,//

DWORD dwCreationDisposition,

DWORD dwFlagsAndAttributes,

HANDLE hTemplateFile

);

typedef struct _SECURITY_ATTRIBUTES {

DWORD nLength;

LPVOID lpSecurityDescriptor;

BOOL bInheritHandle; // 如果希望被继承需要设为:TRUE

} SECURITY_ATTRIBUTES, *PSECURITY_ATTRIBUTES;


2、需要记录下CreateFile执行之后创建的对象的标示HANDLE的值。


3、如果子进程要继承父进程的串口对象,必须在父进程创建CreateProcess是设置bInheritHandles为TRUE。

BOOL CreateProcess(

LPCTSTR lpApplicationName,

LPTSTR lpCommandLine,

LPSECURITY_ATTRIBUTES lpProcessAttributes,

LPSECURITY_ATTRIBUTES lpThreadAttributes,

BOOL bInheritHandles, // 如果希望子进程可以继承父进程的HANDLE需要设为:TRUE

DWORD dwCreationFlags,

LPVOID lpEnvironment,

LPCTSTR lpCurrentDirectory,

LPSTARTUPINFO lpStartupInfo,

LPPROCESS_INFORMATION lpProcessInformation

);


4、通过以上的设置,子进程就可以通过串口对象的HANDLE的值,进行操作了。


::WriteFile(‘串口对象的HANDLE的值’, "1", 2, &ulWritedBytes, NULL )


::ReadFile(‘串口对象的HANDLE的值’, szReadBuf, 100, &ulReadedLen , NULL )
hnhyhongmingjiang 2011-05-16
  • 打赏
  • 举报
回复
DLL共享内存可以实现.提供这个思路给你.我试过.
共享内存是可以,问题是现在是共享一个串口,它和共享数据还是有区别的,你确定你有在项目中几个进程通过DLL共享一个串口吗
当我遇上-你 2011-05-14
  • 打赏
  • 举报
回复
使用进程间通信看看
QQ515311445 2011-05-13
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 hnhyhongmingjiang 的回复:]

91兄,那你用的多进程共享串口通讯采用的是什么办法。我说的不是做什么虚拟串口驱动之类的
我现在的情况是【多个进程必须要通过同一个串口进行数据的读取和收发】,有没有比较好的实现思路,其他的大侠能指点个方向,感激中。。。。
我另外的思路是这样,在一个进程中实现串口的收发监控。其他的进程通过事件或者消息(这个不知道哪个效率更高,没比较多,内核对象的事件效率更高是不是这样的?)
另外的就是我上面想……
[/Quote]
DLL共享内存可以实现.提供这个思路给你.我试过.
91program 2011-05-11
  • 打赏
  • 举报
回复
数据量比较大,除了使用虚拟串口,偶没什么好的办法。
hnhyhongmingjiang 2011-05-10
  • 打赏
  • 举报
回复
最简单的方法,是一个进程中接收,然后分发给其它里程。但效率肯定是低,不能用于处理数据速度要求较快的情况
=====这个就是我上面的思路之一啊。
我要高效的办法,有没有啊,能提供一个思路吗
hnhyhongmingjiang 2011-05-10
  • 打赏
  • 举报
回复
貌似没有人知道其他办法。。自己顶下。。。
当我遇上-你 2011-05-09
  • 打赏
  • 举报
回复
我也是用的4L的方法
91program 2011-05-09
  • 打赏
  • 举报
回复
最简单的方法,是一个进程中接收,然后分发给其它里程。但效率肯定是低,不能用于处理数据速度要求较快的情况。
hnhyhongmingjiang 2011-05-09
  • 打赏
  • 举报
回复
91兄,那你用的多进程共享串口通讯采用的是什么办法。我说的不是做什么虚拟串口驱动之类的
我现在的情况是【多个进程必须要通过同一个串口进行数据的读取和收发】,有没有比较好的实现思路,其他的大侠能指点个方向,感激中。。。。
我另外的思路是这样,在一个进程中实现串口的收发监控。其他的进程通过事件或者消息(这个不知道哪个效率更高,没比较多,内核对象的事件效率更高是不是这样的?)来通知这个实现了串口通讯的进程
另外的就是我上面想的用一个DLL共享,不知道这个思路可行不?
如果这两个思路都不行的话,有谁能提供一种更安全效率更高的办法
hnhyhongmingjiang 2011-05-09
  • 打赏
  • 举报
回复
91兄,那你用的多进程共享串口通讯采用的是什么办法。我说的不是做什么虚拟串口驱动之类的
我现在的情况是【多个进程必须要通过同一个串口进行数据的读取和收发】,有没有比较好的实现思路,其他的大侠能指点个方向,感激中。。。。
我另外的思路是这样,在一个进程中实现串口的收发监控。其他的进程通过事件或者消息(这个不知道哪个效率更高,没比较多,内核对象的事件效率更高是不是这样的?)
另外的就是我上面想的用一个DLL共享,不知道这个思路可行不?
如果这两个思路都不行的话,有谁能提供一种更安全效率更高的办法
91program 2011-05-09
  • 打赏
  • 举报
回复
冲突肯定会的,一个串口不可能给多个应用使用。就算你将串口封装在DLL,也是多次使用串口的。

19,502

社区成员

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

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