Microsoft KB Archive/45701: Difference between revisions

From BetaArchive Wiki
(importing KB archive)
 
m (X010 moved page Microsoft KB Archive/Q45701 to Microsoft KB Archive/45701 without leaving a redirect: Text replacement - "Microsoft KB Archive/Q" to "Microsoft KB Archive/")
 
(No difference)

Latest revision as of 19:23, 12 August 2020

Using Shared Memory Between Applications

PSS ID Number: Q45701 Article last modified on 11-05-1993

2.03 2.10 3.00 MS-DOS

The information in this article applies to:
- Microsoft Windows Software Development Kit for Windows version 3.0

SUMMARY

When using DDE to transfer data between two applications, you must always remember that all shared memory objects in DDE are to be treated as read only by the recipients. This is stated on Page 118 of the “Microsoft Windows Software Development Kit Windows Extensions” manual, in the DDE section. These guidelines were created to ensure that your application will work correctly when using expanded memory, since the global memory objects of the application will be bank switched out when the application is no longer the current task. The following steps should be applied to transferring data between applications where Application A and Application B are two applications communicating via DDE.

MORE INFORMATION

Application A

hGlobalA = GlobalAlloc(..,GMEM_DDESHARE,….) hPointerA = GlobalLock(hGlobalA) Write information to Memory specified by hPointerA GlobalUnlock(hGlobalA) PostMessage(…,hGlobalA,…)

Application B

hGlobalB = GlobalAlloc(..,GMEM_DDESHARE,…) hPointerB = GlobalLock(hGlobalB) hPointerA = GlobalLock(hGlobalA) Copy memory in Global Area for application A into Global memory are for application B. Modify item in memory area specified by hPointerB. GlobalUnlock(hGlobalB) GlobalUnlock(hGlobalA) GlobalFree(hGlobalA) PostMessage(…,hGlobalA,…)

The main point of this example is to illustrate the necessity for copying the data in the Global Area created by A into a Global Area created by B, then modifying the information in Global Area B and passing the handle to B’s Global Memory area back to A (rather than assuming that the handle to A’s global memory will reflect the changes made by Application B, which is not the case). You cannot pass a Global Memory handle to Application B, modify the memory using that Global Handle, and then have A use the same handle to retrieve the updated information. The global object created by Application A and copied to B’s banks is not copied back to A’s banks. A still has the original object (not modified) residing in its banks.

Additional reference words: 3.00 KBCategory: KBSubcategory: UsrDdeMemmgt Copyright Microsoft Corporation 1993.