Windows核心编程-多个应用程序实例间共享数据

C# winform程序进程之间互相通信 该代码创建了一个具有写权限的共享内存区域,大小为1024字节。另一个进程可以读取该共享内存区域,并读取写入的字符串。下面是一个简单的例子,使用了C#的System.IO.MemoryMappedFiles类,创建了一个具有写权限的共享内存区域,并在该区域中写入了一个字符串。另一个进程可以读取该共享内存区域,并读取写入的字符串。下面是一个简单的例子,展示了如何在C#中使用Socket进行网络通信。这些都是实现程序之间通信的常见方式,具体选择哪种方式,需要根据实际情况进行选择。 阅读详情

多个应用程序实例间共享数据

Windows在一个Win32程序的地址空间周围筑了一道墙。通常,一个程序的地址空间中的数据是私有的,对别的程序而言是不可见的。但是在一个应用程序的多个实例间共享数据还是有简单的方法的。当您在一个应用程序实例中修改数据,这种改变将立即反映在其他的应用程序实例中。

正常的应用程序其数据和代码段都是在独立的段中,启动多个程序时,静态变量等数据都是独立的,不能用来在多个实例间共享数据。其独立的原因是因为系统给它们提供的默认段不具备共享功能。而我们可以在程序中手动指定共享的数据段,这样就可以直接在多个应用程序实例间共享数据了。
下面我用一个事例来直接说明

/************************************************************************/
/*         转载请注明文章来自:http://blog.youkuaiyun.com/windows_nt		    */
/*				    在多个应用程序实例间共享数据						*/
/************************************************************************/

#include <Windows.h>
#include <iostream>

// Tell the compiler to put this initialized variable in its own Shared 
// section so it is shared by all instances of this application.
#pragma data_seg("Shared")
volatile LONG g_lApplicationInstances = 0;
#pragma data_seg()

// Tell the linker to make the Shared section readable, writable, and shared.
#pragma comment(linker, "/Section:Shared,RWS")


void main ()
{
	// There is another instance of this application running
	InterlockedExchangeAdd(&g_lApplicationInstances, 1);

	printf("这是第 %d 个应用程序实例。\r\n", g_lApplicationInstances);

	printf("你现在可以启动新的应用程序实例来测试数据了。\r\n");

	getchar();
	// This instance of the application is terminating
	InterlockedExchangeAdd(&g_lApplicationInstances, -1);

	return;
}

说明:

      第一个#pragma叙述建立数据段,这里命名为shared。您可以将这段命名为任何一个您喜欢的名字。在这里的#pragma叙述之后的所有初始化了的变量都放在shared数据段中。
      第二个#pragma叙述标示段的结束。对变量进行专门的初始化是很重要的,否则编译器将把它们放在普通的未初始化数据段中而不是放在shared中。
      连结器必须知道有一个「shared」共享数据段。可以直接用DLL原始码指定连结选项,就像这样:
#pragma comment(linker,"/SECTION:shared,RWS")        字母RWS表示段具有读、写和共享属性。

应用场合:
    1.#pragma data_seg()一般用于DLL中。也就是说,在DLL中定义一个共享的,有名字的数据段。最关键的是:这个数据段中的全局变量可以被多个进程共享。否则多个进程之间无法共享DLL中的全局变量。
    2.共享数据必须初始化,否则微软编译器会把没有初始化的数据放到.BSS段中,从而导致多个进程之间的共享行为失败。


 

《windows核心编程》学习笔记——在同一个可执行文件或dll的多个实例间共享静态数据 默认情况下,同一个exe文件或dll的多个实例之间不会共享全局或静态数据。 windows没有提供一种简便的方法来检查用户是否在运行同一个应用程序的多个实例。如果应用程序的多个实例能够共享同一个全局变量,那么我们就可以用这个变量来保存正在运行的实例的数量。通过这个方法可以控制当前 阅读详情

相关推荐

Windows11与Windows7虚拟机间高效共享文件夹的实战指南

本文提供了一份详尽的实战指南,帮助用户在Windows 11主机与Windows 7虚拟机之间高效设置共享文件夹。文章从准备工作、主机与虚拟机两端的具体配置步骤入手,详细讲解了如何通过配置网络、共享权限和安全权限来搭建稳定的文件传输桥梁,并针对常见的访问错误提供了实用的排坑解决方案与安全建议,旨在彻底解决跨系统文件交互的痛点,提升工作效率。

tea88的博客 932

Linux16 ---共享内存、操作函数、使用示例

共享内存 操作函数 使用示例

kyrie_sakura的博客 1180

《Windows核心编程(第五版)》源码深入解析

本文还有配套的精品资源,点击获取 简介:《Windows核心编程(第五版)》是一本深入讲解Windows系统编程的权威书籍,通过源码展示了Windows API、系统服务、线程管理等核心概念。本书旨在帮助开发者理解Windows内部工作原理,并通过实际代码示例学习如何进行高效的应用程序开发。源码覆盖了API调用、线程管理、内存管理、文件系统等关键主题,提供了理论与实践相结合...

weixin_29867767的博客 1666

同一应用程序同时运行两次,代码段是同一份嘛

1、先看看下面代码,代码中额外增加了获取进程代码段和数据段的。 #define _GNU_SOURCE #include <unistd.h> #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <stdlib.h> #include <string.h> int a = 0; int

sydyh43的博客 698

Windows核心编程技术详解与实践

Windows操作系统的核心是一个极其复杂的系统软件,称为内核。它负责管理计算机硬件资源,并为运行在系统上的软件提供服务。Windows内核架构设计上倾向于模块化,允许添加或移除功能,而不影响系统的稳定性和性能。动态链接库(Dynamic Link Library,简称DLL)是Windows操作系统中实现共享函数库的一种方式。它是一种包含可由多个程序同时使用的代码和数据的库。

weixin_32005771的博客 1050

用内存映射在多个应用程序之间共享数据

用内存映射在多个应用程序之间共享数据,使用 (1)用CreateFileMapping()创建一个文件映射内核对象; (2)用MapViewOfFile()将文件数据映射到进程的地址空间; (3)用UnmapViewOfFile()从进程地址空间解除这个映射。

C# Winform 多个程序之间的通信(非Scoket)

C# Winfrom程序之间通讯_c# sendmessege copydatastruct 返回多个值_在之前我写过 winform 程序与程序之间的通信,但是这个版本有个问题,那就是只能由两个程序进行通信,同时打开多个程序的话,接收方收到的数据就会一模一样,这次发表这个教程,也就是要解决这个问题。归根结底,还是FindWindow这个函数的用法没用对,下面是对应的解释:函数获得一个顶层窗体的句柄,该窗体的类名和窗体名与给定的字符串相匹配。这个函数不查找子窗体。

熊思雨的博客 3417

从解压到编译:手把手带你用TeXstudio搞定第一篇ACM LaTeX论文

本文详细指导如何使用TeXstudio从解压ACM LaTeX模板到成功编译第一篇学术论文的全过程。涵盖环境准备、模板配置、TeXstudio设置及常见问题排查,特别针对ACM会议论文格式要求,帮助学术新人快速掌握LaTeX写作技巧。

weixin_30655569的博客 254

关于启动应用程序的多个实例的问题

今天学习的过程中遇到了一个问题: 记得学VB的时候遇到过防止程序重复执行的问题,当时的解决办法是检测app对象的PrevInstance的属性,如果为真说明在先前已经有一个实例了,为假则说明是第一次运行。代码如下:If App.PrevInstance Then   EndEnd If这个代码在VB中很好用。今天又遇到了同样的问题,不过环境变了。在学多线程编程的时候发现

CrazyNPC的专栏 1074

树莓派4B:控制步进电机

文章目录准备阶段接线阶段树莓派程序 准备阶段 准备以下物品,淘宝都可以买到: 57步进电机 电源开关(220v转24v,3A,72W) 步进电机驱动器 电源线 电线 杜邦线 树莓派4B一套 具体型号如下: 接线阶段 整体:接线效果如下图 电源开关起220v转24v作用,很好接线,输出24v接入步进电机驱动器 步进电机驱动器的 A+ A- B+ B- 按提示接步进电机四线,步进电机上就会有说...

学习路上的鸭子的博客 1万+

运维工程师面试整理-安全常见安全漏洞及修复

暴露在互联网的服务和端口可能会成为攻击者的目标,例如开放的SSH、FTP、Telnet等。:攻击者通过注入恶意脚本,使其在其他用户的浏览器中执行,从而窃取用户信息或劫持用户会话。:通过插入恶意SQL代码,攻击者可以操纵应用程序的数据库查询,执行未授权的数据库操作。:展示你对新兴安全威胁和防护技术的了解和学习能力,如零信任架构、基于AI的安全分析等。在不同的服务器或沙盒环境中处理和存储上传的文件,避免在Web根目录下保存可执行文件。采用安全框架和标准(如OWASP、NIST),确保系统和应用的安全合规性。

不务正业的猿 922

windows核心编程之进程间共享数据

有时候我们会遇到window进程间共享数据的需求,比方说我想知道系统当前有多少某个进程的实例。我们可以在程序中定义一个全局变量,初始化为0,每当程序启动后就加1,当然我们我们可以借助第三方介质来储存这个变量,然后解析。这样做必须做到先写入后解析,不能实时更新数据。如果不考虑其他储存介质,只是进程中的通信,应该怎么做呢?windows提供了一些可行的方法,下面介绍常用的两种。 一、共享数据段 #

专注于网络编程,游戏后台,高并发 2659

提取游戏音频文件.bnk

bnk其实是一种对音频的加密方式,一个.bnk文件中通常包含了多个语音文件,一般可以使用Wwise-Unpacker来解码.bnk格式文件该工具命名没有规律,需要手动整理文件名。市面上很多的游戏都把音频文件打成.bnk文件(比如永劫无间),用这种方式可以将你想要的游戏的音频都提取出来,本文内容仅供自己娱乐。

类人_猿的博客 8745

windows核心编程

主要用于记录windows核心编程这本书籍的学习。

weixin_45002961的博客 1341

大疆视觉算法面试,手推极线几何这关刷掉了一半人

摘要:大疆机器视觉算法工程师面试重点考察目标检测工程优化、深度估计几何原理和视觉SLAM全流程。目标检测侧重模型压缩和部署优化,需掌握知识蒸馏、量化及算子融合;深度估计要求推导双目几何并理解单目深度恢复方法;视觉SLAM需熟悉前后端流程及ORB-SLAM3/VINS-Mono区别。面试常要求手推PnP等公式,注重实践能力。准备需重点练习公式推导和代码实现,掌握工程落地细节。

郑伟强dev的专栏 192

零基础做完YOLOv8船只检测系统:HRSC2016数据集 + 完整UI,稳过答辩

亲爱的同学,通过这篇教程,你已经掌握了“基于YOLOv8的HRSC2016微小船只检测系统”从数据集处理、模型训练到Tkinter界面开发的全流程。这个课题既贴合“海事智能化”的产业战略,又涵盖了“目标检测、深度学习、界面开发”等多个毕设评分点,非常适合作为计算机或海事工程专业的毕业设计。在实践中,你可能会遇到“海面背景复杂导致船只漏检”“微小船只识别精度不足”“UI与模型推理同步卡顿”等挑战——别担心,这些都是技术成长的必经之路。

FJN110的博客 108

剖析《Windows 核心编程(第 5 版)》:掌握 Windows 平台高效编程秘诀

Windows 核心编程(第 5 版)》凭借丰富的内容和深入的讲解,为开发者全面展现了 Windows 操作系统的核心编程技术。通过学习这本书,开发者不仅能够深入理解 Windows 操作系统的底层机制,还能掌握在 Windows 平台上进行高效编程的方法和技巧。无论是开发桌面应用程序、服务器端程序,还是进行系统级编程,这本书都能为开发者提供强大的支持和指导。对于渴望在 Windows 平台上提升编程能力的开发者而言,《Windows 核心编程(第 5 版)》无疑是一本不可或缺的技术佳作。

数字魔方操控师的博客 1038

YOLOv8源码解析与复现:ShuffleAttention:高效的混合注意力机制 实现通道和空间混合注意力

随着深度学习在计算机视觉领域的飞速发展,卷积神经网络(CNNs)已经成为图像分类、目标检测、语义分割等任务的核心。为了进一步提升模型的性能,研究者们引入了“注意力机制”,旨在让网络能够动态地关注输入数据中最具信息量的部分。经典的注意力模块,如SE-Net(Squeeze-and-Excitation Networks)和CBAM(Convolutional Block Attention Module),通过通道注意力或结合通道与空间注意力,显著增强了模型的特征表达能力。

FJN110的博客 554

Windows核心编程之共享内存

Windows共享数据和信息的机制:RPC、COM、OLE、DDE、窗口消息、剪贴板、邮箱、管道、套接字以及内存映射文件。 内存映射:通过让两个或多个进程映射同一个文件。(在进程空间中保留一个地址空间区域,将物理存储器提交给该区域) 内存映射文件的物理存储器(用来作为虚拟内存)来自一个位于磁盘驱动器上的数据文件。一旦该文件被映射,就可以访问它,就像文件已经加载内存一样。(操作系统使得内存能够将...

长风v持成的博客 8122

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

windows核心编程--6、使用共享栈端实现进程数据共享

一、前言     该系列前几篇文章:         windows核心编程–1、使用vs2019编写第一个win32项目         windows核心编程–2、windows的画笔画刷以及一些简单的应用         windows核心编程–3、有关进程的三个函数         windows核心编程–4、线程和线程同步         windwos核心编程–5、虚拟内存相关函数及其应用 二、相关工具     IDE:Visual Studio 2019 四、实验要求     实现控制程序

windy_ll的博客 285

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Windows核心编程 第三章 内核对象

Windows核心编程 第三章 内核对象

天使也掉毛 1349

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Windows核心编程第五版pdf

下载地址:网盘下载图书简介:编辑这是一本经典的Windows核心编程指南,从第1版到第5版,引领着数十万程序员走入Windows开发阵营,培养了大批精英。作为Windows开发人员的必备参考,本书是为打算理解Windows的C和C++程序员精心设计的。第5版全面覆盖Windows XP,Windows Vista和Windows Server 2008中的17...

weixin_30568715的博客 4642

windows核心编程6

 第6章线程的基础知识进程是由两个部分构成的,一个是进程内核对象,另一个是地址空间。同样,线程也是由两个部分组成的:* 一个是线程的内核对象,操作系统用它来对线程实施管理。内核对象也是系统用来存放线程统计信息的地方。* 另一个是线程堆栈,它用于维护线程在执行代码时需要的所有函数参数和局部变量(第16章将进一步介绍系统如何管理线程堆栈)。 进程是不活泼的。进程从来不执行任何东

freedom0203的专栏 2383

SMB/CIFS协议互通:Windows与Linux间的文件共享

通过SMB/CIFS协议,Windows与Linux系统可无缝共享文件。利用Samba在Linux上搭建共享服务或挂载Windows共享目录,结合安全认证与性能调优,适用于混合IT环境中的数据协作,支持企业级权限管理与高可用架构。

weixin_42510201的博客 989

游戏编程之二 windows编程基础

第二章 windows编程基础 第一节 引言 为了跟上潮流,我们抛弃了已快被淘汰的DOS操作系统,所有的讲解和例程都是基于微 软的Windows操作系统的。考虑到很多的用户并没有Windows编程基础,所以我们设置了这 一专门讲述、讨论Windows的术语、概念的部分,以使这部分用户能较快地理解和掌握我们 所讲述、讨论的编程思想和编程方法。这一部分中主要讲述的是Windo

张晨光老师的播客 2553
上一篇: windows核心编程-虚拟内存
下一篇: windows核心编程-内存映射文件(一)
codinglf
博客等级 码龄16年 237粉丝 127原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值