Click here to Skip to main content
12,826,440 members (23,338 online)
Click here to Skip to main content
Add your own
alternative version


86 bookmarked
Posted 17 Jan 2000

How to share a data segment in a DLL

, 17 Jan 2000
Rate this:
Please Sign up or sign in to vote.
Using #pragma statements to share variables in a DLL
  • Download demo project - 37 Kb
  • <!-- Article Starts -->


    This is a very simple how to for setting up a shared data segment in a DLL. A shared data segment is used when you want to share variable values among several exe's. This is not as clever as a semaphore and not as powerful as a COM Event_Sink_MAP. However, it has very little overhead and it is very simple to implement. It is worth while knowing things can be done this easy.

    A little background.

    One advantage of using a DLL is that several processes (exe's) can share a code segment. They share the code segment but each process gets it's own data segment. Therefore if five processes use a DLL there is only one code segment and five data segments.

    What is a shared data segment?

    A data segment is a chunk of main memory that holds the programs variables. It is the thing that gets swapped to the swap file.

    A shared data segment in a DLL is simply one or more variables that are not unique to a specific process. In many respects this example code is very similar to a semaphore. If you really think that more than one process at a time is going to be updating the shared variables, then maybe a semaphore is the right choice for you. However we will control the update of the shared variables via critical sections, therefore this technique is just as safe as a true semaphore. What has more overhead, the ramp up cost of using CSemaphore all the time or the infrequent spin locking this approach might incur? The answer depends of what you are doing.

    What makes a data segment shared?

    These three pragma statements override the default data segment behavior and creates a shared data segment. See MyClass.cpp in the DLL.
    // Global and static member variables that are not shared.
    #pragma data_seg("SHARED")  // Begin the shared data segment.
    // Define simple variables
    // Integers, char[] arrays and pointers
    // Do not define classes that require 'deep' copy constructors.
    #pragma data_seg()          // End the shared data segment and default back to 
                                // the normal data segment behavior.
    // This is the most important statement of all
    // Ideally you can set this in the projects linker tab, but I never could get 
    // that to work.  I stumbled across this in a discussion board response from 
    // Todd Jeffreys.  This tells the linker to generate the shared data segment.  
    // It does not tell it what variables are shared, the other statements do that,
    // but it does direct the linker to make provisions for the shared data segment.
    #pragma comment(linker, "/section:SHARED,RWS")


    That's it. The download zip is mostly window dressing. The code does demonstrate how to use a PostMessage as a simple alternative to COM's message sink. Furthermore, the code shows how to set up a critical section which is something you may or may not want. Depending on if you intend to allow multiple processes to update the shared data segment or just read it.

    The code is written in VC 5. First build the DLL TestMemorySpace and then the driver executable Testexe.exe. Start two instances of the test exe, keep them both maximized, and click the button that says 'Read Me First'.

    In this simple 'How To' I use two instances of the same exe, you could use X number of different exe's that all share this DLL.

    If you learn something from this code - great! If you can improve upon it, I would love to learn from you. I maintain no rights of any kind to it. This code was not plagiarized from any other source.

    Good Luck and trust me the code is simpler than the explanation.


    This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

    A list of licenses authors might use can be found here


    About the Author

    Phil McGahan
    United States United States
    No Biography provided

    You may also be interested in...

    Comments and Discussions

    QuestionXcode Pin
    Member 1067960929-Mar-14 17:59
    memberMember 1067960929-Mar-14 17:59 
    QuestionHow criticalsection works across process ? Pin
    DeveloperRK11-Apr-12 15:28
    memberDeveloperRK11-Apr-12 15:28 
    AnswerRe: How criticalsection works across process ? Pin
    Member 418118213-Jul-12 11:19
    memberMember 418118213-Jul-12 11:19 
    GeneralMy vote of 5 Pin
    Richard Jackett25-Oct-10 13:03
    memberRichard Jackett25-Oct-10 13:03 
    QuestionHow to find whether a function is already called by another EXE? Pin
    rupanu23-Jul-08 22:41
    memberrupanu23-Jul-08 22:41 
    Hi, my problem is more or less same. A function in the Dll has to be called only once, but how would another application know whether it has already been called?
    AnswerRe: How to find whether a function is already called by another EXE? Pin
    Raja Iqbal Singh22-Sep-08 2:16
    memberRaja Iqbal Singh22-Sep-08 2:16 
    GeneralRe: How to find whether a function is already called by another EXE? Pin
    grmanoj13-Aug-09 23:51
    membergrmanoj13-Aug-09 23:51 
    GeneralShare data between different processes loding same Dll Pin
    Aamol M5-Nov-07 23:32
    memberAamol M5-Nov-07 23:32 
    GeneralRe: Share data between different processes loding same Dll Pin
    ehaerim28-Jul-10 12:56
    memberehaerim28-Jul-10 12:56 
    QuestionHow to share a file across the processes? Pin
    Member #37409627-Feb-07 20:39
    memberMember #37409627-Feb-07 20:39 
    Generalsharing data between some processes Pin
    giugiugiugigugi17-Apr-06 1:35
    membergiugiugiugigugi17-Apr-06 1:35 
    Questionit still seems to run only once?? Pin
    googlex10-Aug-05 17:29
    membergooglex10-Aug-05 17:29 
    GeneralSharing between different DLLs Pin
    wangyu4298-Sep-04 5:42
    memberwangyu4298-Sep-04 5:42 
    GeneralRe: Sharing between different DLLs Pin
    peterchen28-Jul-05 3:17
    memberpeterchen28-Jul-05 3:17 
    QuestionCan I share Handle for a serial com port Pin
    hedonist18-Jul-04 21:48
    memberhedonist18-Jul-04 21:48 
    AnswerRe: Can I share Handle for a serial com port Pin
    Anonymous23-Aug-04 13:32
    sussAnonymous23-Aug-04 13:32 
    GeneralRe: Can I share Handle for a serial com port Pin
    hedonist23-Aug-04 15:56
    memberhedonist23-Aug-04 15:56 
    Questiondll???? Pin
    dnqhung10-Jun-04 2:26
    memberdnqhung10-Jun-04 2:26 
    QuestionHow to share a data segment in a DLL Pin
    bkarl200014-May-04 9:31
    memberbkarl200014-May-04 9:31 
    GeneralDlls and disk access Pin
    llvllatrix3-Mar-04 17:41
    memberllvllatrix3-Mar-04 17:41 
    GeneralRe: Dlls and disk access Pin
    Anonymous23-Aug-04 13:34
    sussAnonymous23-Aug-04 13:34 
    Generalit doesn't work :( Pin
    mone et pock8-Jan-04 22:13
    membermone et pock8-Jan-04 22:13 
    GeneralRe: it doesn't work :( Pin
    McGahanFL9-Jan-04 3:57
    memberMcGahanFL9-Jan-04 3:57 
    GeneralDLL blues Pin
    newbee7818-Nov-03 5:07
    membernewbee7818-Nov-03 5:07 
    GeneralDLL blues Pin
    newbee7818-Nov-03 5:06
    membernewbee7818-Nov-03 5:06 
    GeneralCould not get it to compile. Pin
    WREY25-Oct-03 13:05
    memberWREY25-Oct-03 13:05 
    GeneralRe: Could not get it to compile. Pin
    McGahanFL27-Oct-03 4:05
    memberMcGahanFL27-Oct-03 4:05 
    GeneralGot it to work!! Pin
    WREY17-Sep-04 13:49
    memberWREY17-Sep-04 13:49 
    GeneralThe way to store objects in shared segment Pin
    backstab11-Sep-03 0:10
    memberbackstab11-Sep-03 0:10 
    GeneralIt doesn't work when on Release way Pin
    goldust11-Jul-03 11:10
    membergoldust11-Jul-03 11:10 
    GeneralThe 3 basic problems people have. Pin
    McGahanFL14-Jul-03 3:35
    memberMcGahanFL14-Jul-03 3:35 
    GeneralSample CRASHS in Win2k Ad server SP3 Pin
    Tommy0130-May-03 6:14
    memberTommy0130-May-03 6:14 
    GeneralSharing data in ATL dll Pin
    lalithkx28-May-03 14:28
    memberlalithkx28-May-03 14:28 
    Generalany Info about Proxy DLL (Trojan DLL) Pin
    bfadi5-Mar-03 11:20
    memberbfadi5-Mar-03 11:20 
    GeneralA few serious problems Pin
    lellis15-Feb-03 14:52
    memberlellis15-Feb-03 14:52 
    GeneralNot critical section, rather Mutual-exclusion Pin
    Dursun Kirkgöze9-Oct-02 0:12
    sussDursun Kirkgöze9-Oct-02 0:12 
    GeneralThe sample doesn't work Pin
    Dudi Avramov18-Jun-02 22:31
    memberDudi Avramov18-Jun-02 22:31 
    GeneralRe: The sample doesn't work Pin
    RantNRave3130-May-03 10:00
    memberRantNRave3130-May-03 10:00 
    GeneralRe: The sample doesn't work Pin
    BlueMonk6-Jun-03 0:07
    memberBlueMonk6-Jun-03 0:07 
    GeneralRe: The sample does work if... Pin
    BlueMonk8-Jun-03 20:58
    memberBlueMonk8-Jun-03 20:58 
    GeneralRe: The sample does work if... Pin
    BlueMonk8-Jun-03 20:59
    memberBlueMonk8-Jun-03 20:59 
    GeneralRe: The sample does work if... Pin
    kaiser39013-Oct-11 21:18
    memberkaiser39013-Oct-11 21:18 
    QuestionHas anyone tried with Windows XP? Pin
    Pine27-May-02 22:30
    memberPine27-May-02 22:30 
    AnswerRe: OOPs :) Pin
    Pine27-May-02 22:47
    memberPine27-May-02 22:47 
    QuestionHow to import class from the DLL? Pin
    Marek Hrncir20-May-02 5:46
    memberMarek Hrncir20-May-02 5:46 
    AnswerRe: How to import class from the DLL? Pin
    RantNRave3130-May-03 9:53
    memberRantNRave3130-May-03 9:53 
    GeneralHere is a little "gotcha" and a possible work-around .. Pin
    David Patrick9-May-02 9:38
    memberDavid Patrick9-May-02 9:38 
    GeneralRe: Here is a little "gotcha" and a possible work-around .. Pin
    Tim Smith9-May-02 9:52
    memberTim Smith9-May-02 9:52 
    GeneralRe: Here is a little "gotcha" and a possible work-around .. Pin
    David Patrick9-May-02 11:34
    memberDavid Patrick9-May-02 11:34 
    GeneralRe: Here is a little "gotcha" and a possible work-around .. Pin
    David Patrick13-May-02 7:02
    memberDavid Patrick13-May-02 7:02 

    General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

    Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

    Permalink | Advertise | Privacy | Terms of Use | Mobile
    Web02 | 2.8.170326.1 | Last Updated 18 Jan 2000
    Article Copyright 2000 by Phil McGahan
    Everything else Copyright © CodeProject, 1999-2017
    Layout: fixed | fluid