有两个程序A和B。
 A 运行后打开COM1并一直占用;
 B 需向COM1发送数据,但COM1已被A占用
所以我考虑B将要发送的数据传给A,再由A发送。
如果用读写文件的方式来实现,可能磁盘读写次数会急增,
用winsock会不会不现实?
请问还有其他简单一些的方法么?

解决方案 »

  1.   

    1)在一台电脑,运行串口应用程序,你没必要使用两个程序,完全可将程序A和B的代码整合到一个工程,然后编译为一个EXE文件.如果程序A或B的代码没有,则另当别论.
    2)使用双串口,在本机将两串口互连,由程序B经COM2将数据发送到COM1,由程序A接收后在转发.如你电脑无双串口,可增加一PCI串口扩展卡来增加串口满足.
      

  2.   

    谢谢楼上的答复。
    我只能对一个串口操作,而且这个串口很可能是USB虚拟的。这个串口连接两种设备,一种设备(可以是键盘)只发送信息,一种(可以是打印机)只接收信息。
    我的程序只负责串口发送跟接收,至于串口接到了信息怎么处理是硬件的事,我不用管。
    现在的情况是这样的,要发送的信息不确定,由其他用户来确定。
    我程序A是用来接收并处理串口发来的信息。程序B做成一个DLL,让用户调用。所以把两个程序整合在一起也不行。
    请问还有其他方法么?
      

  3.   

    是 Windows 标准 DLL 吗?你可以这样,程序 A 做成 .exe 与一个 .DLL 的组合,对串口的操作通过 .DLL 来进行。程序 B (另一个 DLL) 可以通过 A 的 DLL 的函数来间接操作串口。
      

  4.   

    我的目的就是解决资源冲突的问题啊。
    程序A一直运行着,程序B用户程序调用,用户程序如想发送信息,就将信息通过B这个DLL传给A处理,程序A对用户来说是不可见的。
      

  5.   

    那就对了,A、B 是不可能同时打开端口,你的方案不是出来了:
    端口仅由 A 打开,可以独立处理数据;
    B 需要处理数据时需要通过 A 代理,A、B 之间的通讯可用 DDE 通讯实现;
    B 启动时自动运行程序 A;
    A 启动时用 App.PrevInstance 进行判断防止启动多个实例。
      

  6.   

    A、B 之间的通讯可用 DDE 通讯实现偶不懂DDE通讯,能否给个例子
      

  7.   

    DDE: http://topic.csdn.net/t/20021204/09/1229006.html
      

  8.   

    谢谢,联接我看了。现在又有新的问题,我要把程序B做成DLL, VB做出来的DLL又不能在其他程序中调用,所以打算换成DELPHI做,即A是vb编的EXE,B是delphi编的DLL,两者之间的DDE如何实现?
      

  9.   

    VB DLL 通过 COM 对象引用,比如 CreateObject("Project1.Class1")
      

  10.   

    B这个DLL,是给其他人编程调用的,其他人用的语言不一定是VB,所以我考虑B这个不用VB做。
      

  11.   

    程序间通讯的问题。COM口当然是无法共用了。
    可以用TCP通讯也,可以是DDE,数据库,共享文件,哪怕是剪贴板都可以用来通讯。A可以向COM发东西,B也可以向COM发东西,这样的要求并不好,如果是同一个系统的话,和COM通讯的任务应该具有唯一性。
    因此,你甚至可以专门把向COM口收发信息的功能从A和B中提取出来单独写成一个程序,然后这个程序能够通过DDE,TCP等方法由其他程序控制就可以了。DDE或TCP实在不会的话,哪怕是通过一个文本文件来交换数据都是没问题的。
      

  12.   

    谢谢,我就是这样考虑的,A负责与串口交互,B互责与A交互,A是EXE,B是DLL。
    我不想用读写文件或数据库或剪切板来实现。
    VB程序间的DDE我学会了。我是想通过sendmessage之类的API来实现程序间的通讯,B程序用delphi做,提供几个函数给用户调用,用户调用函数即向A发送用户定义信息,A程序一直运行,接到B传来的信息后再将信息传给串口。A程序跟B程序不能整合在一起,A程序我用来读取串口的数据,对用户来说是透明的。当然,用户向串口发送信息可以直接发给程序A,由于A对用户来说是透明的,所以我用一个中间的程序B来作桥梁。B的函数对用户来说是公开的。
      

  13.   

    如果 B 的调用者支持 DDE 编程,可省略 B 直接提供 A 的 DDE 接口。就像 FlashGet 可以用 DDE 添加下载列表。
      

  14.   

    谢谢!A,B都要的,不能省的。我还得找找程序之间的消息传递或者delphi程序与VB程序进行DDE的资料。
    这贴暂时先结吧。