我正在为两个第三方程序开发一个插件:Windows上的C ++中的A和B(7),并且需要一种强大的,相对简单(快速)的方式来在两个程序之间进行通信。
通信是一种方式:根据程序A中的用户交互,我希望程序A中的插件发送一个信号,最终调用程序B中插件内的函数。
协议很简单。这是我在插件B中的接收函数的签名:
struct XYZ {
double x, y, z;
}
void polyLineSelected(long id, std::vector<XYZ> & points);
你会怎么建议这样做?
答案 0 :(得分:0)
到目前为止,在Windows上实现单向通信的最简单方法是发送WM_COPYDATA
消息。它需要一个COPYDATASTRUCT
参数来将任意数据从一个应用程序移动到另一个应用程序。
对于您的具体示例,发件人的实现如下所示:
// Declare symbolic constants to identify data
enum DataType {
DataType_Points
};
// Declare struct to hold compound data
struct IPCData {
long id;
XYZ pts[];
};
// Allocate buffer
const size_t bufferSize = offsetof(IPCData, pts[points.size()]);
vector<char> buffer(bufferSize);
IPCData* pData = reinterpret_cast<IPCData*>(&buffer[0]);
// Fill the buffer
pData->id = 42;
copy(points.begin(), points.end(), &pData->pts[0]);
// Prepare COPYDDATASTRUCT
COPYDATASTRUCT cds = { 0 };
cds.dwData = DataType_Points; // Can be used by the receiver to identify data
cds.cbData = bufferSize;
cds.lpData = pData;
// Send the data
SendMessage(hWndRecv, WM_COPYDATA,
(WPARAM)hWndSender,
(LPARAM)(LPVOID)&cds);