进程间通信(网络阅读笔记)

 

1、参考《C# 两个独立exe程序直接通信》https://blog.csdn.net/weixin_39326815/article/details/87691942 ,在两个exe文件的两个不同的

      窗体之间 ,通过SendMessage, 发送消息。目的窗体句柄,通过FindWindow函数得到。

2、C#与C/C++的交互 https://www.cnblogs.com/warensoft/archive/2011/12/09/Warenosoft3D.html

     主要还是通过调研动态库的方式

3、参考《怎么能使两个EXE间能交互》http://www.myexceptions.net/c-sharp/66348.html

      使用共享内存方式(Shared Memory)

 a.设定一块共享内存区域
HANDLE CreateFileMapping(HANDLE,LPSECURITY_ATTRIBUTES, DWORD, DWORD, DWORD, LPCSTR)
产生一个file-mapping核心对象
LPVOID MapViewOfFile(
HANDLE hFileMappingObject,
DWORD dwDesiredAcess,
DWORD dwFileOffsetHigh,
DWORD dwFileOffsetLow,
DWORD dwNumberOfBytesToMap
);
得到共享内存的指针
b.找出共享内存
决定这块内存要以点对点(peer to peer)的形式呈现
每个进程都必须有相同的能力,产生共享内存并将它初始化。每个进程
都应该调用CreateFileMapping(),然后调用GetLastError().如果传回的
错误代码是ERROR_ALREADY_EXISTS,那么进程就可以假设这一共享内存区 域已经被别的进程打开并初始化了,否则该进程就可以合理的认为自己 排在第 一位,并接下来将共享内存初始化。
还是要使用client/server架构中
只有server进程才应该产生并初始化共享内存。所有的进程都应该使用

HANDLE OpenFileMapping(DWORD dwDesiredAccess,
BOOL bInheritHandle,
LPCTSTR lpName);
再调用MapViewOfFile(),取得共享内存的指针
c.同步处理(Mutex)
d.清理(Cleaning up) BOOL UnmapViewOfFile(LPCVOID lpBaseAddress);
CloseHandle()

4、消息管道(Message Pipe)
用于设置应用程序间的一条永久通讯通道,通过该通道可以象自己的应用程序
访问一个平面文件一样读写数据。
匿名管道(Anonymous Pipes)
单向流动,并且只能够在同一电脑上的各个进程之间流动。
命名管道(Named Pipes)
双向,跨网络,任何进程都可以轻易的抓住,放进管道的数据有固定的格 式,而使用ReadFile()只能读取该大小的倍数。
可以被使用于I/O Completion Ports

 5、【C#】给无窗口的进程发送消息 https://www.cnblogs.com/ahdung/p/5499570.html

    使用  PostThreadMessage,实际使用了线程之间的通信

 6、C++和C#进程之间通过命名管道通信(附源码) https://www.cnblogs.com/scucyno/archive/2008/10/16/1313053.html

7、使用Winsock:Winsock入门 https://blog.csdn.net/Explorer_day/article/details/83088488

原文地址:https://www.cnblogs.com/xihong2014/p/14666038.html