关于进程间传递数据的问题。神啊,救救我吧!!!

chenchen79 2003-01-16 08:29:40
我想用WM_COPYDATA 在进程间传递数据。该怎么进行?
程序A中,
public:
COPYDATASTRUCT cds;
.......
HWND hwnd = ::FindWindow(NULL, "proB");
if (hwnd != NULL)
{
ZeroMemory(&cds, sizeof(COPYDATASTRUCT));
char strWan[30] ;
strcpy(strWan, "this is a tes program");
cds.cbData= strlen(strWan)+1;
cds.dwData = 0 ;
cds.lpData = strWan;

::SendMessage(hwnd, WM_COPYDATA, (WPARAM)this->m_hWnd,(PARAM) &cds);
}
程序B中该怎么接收?
...全文
101 14 打赏 收藏 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenchen79 2003-02-10
  • 打赏
  • 举报
回复
请结帖。记得多给各位散点分。
chenchen79 2003-02-10
  • 打赏
  • 举报
回复
前些日子急着过年,没来逛。承蒙各位启发,我的做法如下:
In xxDlg.h
afx_msg void OnCopydata();
afx_msg BOOL OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct);

In xxDlg.cpp

#define HANDLE_WM_COPYDATA(hwnd , wParam, lParam, fn) \
((fn)(hwnd, (HWND)(wParam), (PCOPYDATASTRUCT)lParam),0L)
#define FORWARD_WM_COPYDATA(hwnd, hwndFrom, cds, fn) \
(BOOL)(UINT)(DWORD)(fn)((hwnd), WM_COPYDATA, \
(WPARAM)(hwndFrom), (LPARAM)(cds))
.....
ON_BN_CLICKED(IDC_COPYDATA, OnCopydata)
ON_WM_COPYDATA()
.....
void CxxDlg::OnCopydata()
{
HWND hwndOther;
HWND hwndEdit ;
COPYDATASTRUCT cds;
HWND hwnd ;
hwnd = AfxGetMainWnd()->m_hWnd;
// TODO: Add your control notification handler code here
//1. 找到指定窗口
hwndOther = ::FindWindow(NULL,_T("MyCopyData2"));
if (hwndOther == NULL)
{
MessageBox(_T("未找到另一个窗口"),_T("FindWindow Error"), MB_OK);
return;
}
hwndEdit = ::GetDlgItem(hwnd, IDC_DATA);

//2. 封装要传送的数据结构
//prepare the contents of the COPYDATASTRUCT.
cds.dwData = 0;
//get the length of the data block that we are sending.
cds.cbData = (::GetWindowTextLength(hwndEdit) +1 ) * sizeof(TCHAR);
//Allocate a block of memory to hold the string.
cds.lpData = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, cds.cbData);
//Put the edit control's string in the data block.
::GetWindowText(hwndEdit, (char *)cds.lpData, cds.cbData);

//3. 发送消息
FORWARD_WM_COPYDATA(hwndOther , hwnd, &cds, ::SendMessage);

//4. 释放数据结构所占内存
HeapFree(GetProcessHeap(), 0, cds.lpData);

}

BOOL CxxDlg::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct)
{
// TODO: Add your message handler code here and/or call default
//处理接收到的COPYSTRUCT 结构,此处是改变控件中的内容
::SetWindowText(::GetDlgItem(AfxGetMainWnd()->m_hWnd, IDC_DATA),
(char *)pCopyDataStruct->lpData);

return CDialog::OnCopyData(pWnd, pCopyDataStruct);
}
谢谢各位。
icelight 2003-01-20
  • 打赏
  • 举报
回复
靠,我怎么没想到注册表呢。
zzyx 2003-01-20
  • 打赏
  • 举报
回复
仅仅针对这个问题,“我现在只需要向另一个进程中传一个INI文件路径”,俺认为使用注册表最简单。
如楼上各位所言,进程间通讯可用用的计树太多了,自己选择一个合适的就可用了。
sevencat 2003-01-19
  • 打赏
  • 举报
回复
剪贴板的话可能要对剪贴板进行一些编程了。不然搞不好被其他进程接过去。
icelight 2003-01-19
  • 打赏
  • 举报
回复
简洁办法?试试剪贴版?
gull1234 2003-01-18
  • 打赏
  • 举报
回复
Acvanced Windows(third edition) 上有例子。
gull1234 2003-01-18
  • 打赏
  • 举报
回复
to: chenchen79 (神州三号)
正如你所作﹐ 通常用SendMessage() 傳輸一些小的數據﹐ 但是問題是﹕

如果傳輸常規消息﹕SendMessage(hwnd, WM_GETTEXT, (WPARAM)this->m_hWnd,(PARAM) &cds); // 工作正常。

如果傳輸自定義消息﹕SendMessage(hwnd, WM_COPYDATA, (WPARAM)this->m_hWnd,(PARAM) &cds); // 不工作

你必須對你的消息和數據作一下處理。
sevencat 2003-01-18
  • 打赏
  • 举报
回复
楼上说的共享内存应该没问题吧.
chenchen79 2003-01-18
  • 打赏
  • 举报
回复
我现在只需要向另一个进程中传一个INI文件路径,我想知道一种简洁办法。
还有,icelight说的是PreTranslateMessage()吧。我试了,好像不行啊。用文件可以,但是就因为一行字符串就搞个文件太浪费了吧。
icelight 2003-01-17
  • 打赏
  • 举报
回复
解决:
令SendMessage第一个参数指向程序B的主窗口的m_hWnd。
然后在程序B的主窗口的PreTransferMessage()里处理该消息。


建议:
进程间通讯的最好办法不是用WM_COPYDATA,
liagl 2003-01-17
  • 打赏
  • 举报
回复
最简单的是通过一个文件来传送了,使用一个互斥对象使一次只有一个进程可以使用该文件。
也可以使用内存映射或者命名管道。
yansea 2003-01-16
  • 打赏
  • 举报
回复
进程间通信有很多种方法,但基本上还是依赖内存映射文件。
用WM_COPYDATA的话需要在接受消息的窗口过程中处理它。
chenchen79 2003-01-16
  • 打赏
  • 举报
回复
在线等待....
内容概要:本文提出了一种基于高保真电磁暂态仿真的智能电网虚假数据注入攻击(FDIA)数据集构建与影响分析方法,依托PSCAD与MATLAB联合仿真平台,构建IEEE标准测试系统(如9节点或39节点系统)的精细化电磁暂态模型,精确模拟电网在正常运行及遭受FDIA下的动态响应过程,采集高精度、高时间分辨率的电压、电流、功率等电气量时序数据,生成具有强物理约束性和可复现性的攻击数据集。研究进一步结合现代状态估计理论、残差检测机制与机器学习分类算法,对FDIA的隐蔽性特征、攻击传播路径、系统关键变量偏移程度及暂态稳定性影响进行系统性量化评估,旨在为智能电网安全防护体系的设计、入侵检测模型的训练与攻防策略的有效性验证提供高可信度的数据基础与理论支撑。; 适合人群:面向电力系统自动化、能源互联网安全、工业控制系统安全等方向的研究生、科研人员及工程技术人员,要求具备电力系统分析、状态估计基础、MATLAB/PSCAD联合仿真能力以及基本的网络安全背景知识。; 使用场景及目标:① 复现和验证主流FDIA相关学术论文中的攻击模型与检测算法;② 构建符合实际物理规律、可用于训练深度学习或机器学习驱动的入侵检测系统(IDS)的真实攻击数据集;③ 深入探究虚假数据注入对电网暂态稳定性、继电保护动作逻辑、频率调节等关键功能的影响机理。; 阅读建议:本资源以高保真仿真为核心,强调数据生成的真实性与实验可重复性,读者应重点关注PSCAD与MATLAB之间的数据交互机制、攻击向量的设计原则与注入方式、以及多维度影响评估指标体系的构建方法,建议结合所提供的仿真模型与代码进行动手实践与结果验证。
内容概要:本文系统阐述了基于格子Boltzmann方法(Lattice Boltzmann Method, LBM)对二维通道内多孔介质流动进行数值模拟的理论体系、Matlab代码实现流程及结果验证方法。深入剖析了LBM在处理复杂流体系统尤其是不规则几何结构多孔介质流动中的独特优势,详细介绍了模型构建过程、边界条件设定、碰撞与传播环节的算法实现机制,并通过Matlab编程完成仿真运算,实现了对速度场、压力场等关键物理量的可视化分析与精度验证,确保模拟结果具备良好的准确性与可靠性。; 适合人群:具备流体力学基础知识和一定Matlab编程能力的研究生、科研人员及工程技术人员,尤其适合从事多孔介质流动、计算流体力学(CFD)或LBM方法研究的相关领域研究人员。; 使用场景及目标:①掌握格子Boltzmann方法的核心原理及其在多孔介质流动模拟中的具体应用;②学习利用Matlab实现LBM算法并开展科学计算与结果可视化的方法;③为相关科研项目、学术论文复现或实际工程仿真提供可复用的代码框架与技术实施路径。; 阅读建议:建议读者结合流体力学与数值计算相关背景知识,逐步理解算法推导过程,动手运行并调试所提供的Matlab代码,通过调整参数或几何模型加深对LBM方法灵活性与适用性的认识,同时鼓励将该方法拓展至三维流动或多物理场耦合问题的研究中。
内容概要:本文聚焦于“基于变频与移相协同控制的全桥LLC变换器模式切换平滑性优化”这一关键技术问题,通过Simulink仿真平台构建全桥LLC谐振变换器的详细模型,深入研究其在不同工作模式间切换时的动态响应特性。针对传统控制方式在模式切换过程中易引发电压电流冲击、导致系统效率下降与稳定性恶化的问题,提出一种融合变频控制(Frequency Modulation)与移相控制(Phase-Shift Control)的混合协同控制策略。该策略通过精确设计控制逻辑切换时序,优化谐振腔参数匹配,并分析过渡过程中的能量流动规律,有效抑制瞬态波动,实现高效、平稳的模式切换。仿真结果验证了该方法在提升系统动态性能、增强运行可靠性方面的优越性; 适合人群:电力电子、电气工程及其自动化等相关领域的研究生、科研人员以及从事高频电源、新能源变换系统设计的工程技术人员,尤其适合具备电路拓扑分析能力与Simulink建模经验的专业人士; 使用场景及目标:①用于高效率DC-DC变换器中复杂模式切换控制策略的研究与改进;②为电动汽车车载充电机、数据中心电源、光伏微逆变器等对动态性能要求严苛的应用场景提供平滑切换的技术方案;③支撑高水平学术论文的复现、验证与创新性拓展,服务于科研项目中的关键控制算法开发与仿真验证; 阅读建议:建议结合提供的Simulink模型进行同步操作,重点关注变频与移相控制的切换逻辑、参数整定方法及过渡过程的能量管理机制,深入理解两种控制方式的协同作用原理,并可通过调整负载条件、输入电压或谐振元件参数开展多工况仿真分析,以全面掌握系统动态特性。

15,465

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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