A client application posts a WM_DDE_REQUEST or WM_DDE_POKE message to perform a one-time data transfer with a server application. The item-name portion of the shared-memory object passed with the message contains the name of the desired item. When the client posts a WM_DDE_POKE message, the data portion of the shared-memory object contains the data being sent to the server.
If the server can satisfy the request, it renders the item in the requested format and includes it, with a DDESTRUCT data structure, in a shared-memory object and posts a WM_DDE_DATA message to the client, as shown in the following code fragment:
/* The DDE data structure is passed, and */
/* the client should have shared it with us */
pDDEdata = (PDDESTRUCT)mp2;
szReqItem = (BYTE *)(pDDEdata+(pDDEdata->offszItemName));
ShowMessage(szReqItem);
/* We support item status, but not anything else */
if (!strcmpi(szReqItem, szItem))
{
ShowMessage("sending...");
/* Get some sharable memory */
DosAllocSharedMem((PVOID)&mem,
NULL,
sizeof(DDESTRUCT)+21,
PAG_COMMIT |
PAG_READ |
PAG_WRITE |
OBJ_GIVEABLE);
/* Get the server's id and give it access to the */
/* shared memory */
WinQueryWindowProcess(hClientWnd, &pid, &tid);
DosGiveSharedMem(&mem, pid, PAG_READ | PAG_WRITE);
/* Setup DDE data structures */
/* (11 byte name length, 10 plus NULL, 10 byte data length) */
pDDEdata = (PDDESTRUCT)mem;
pDDEdata->cbData = 10; /* Data length */
pDDEdata->fsStatus = 0; /* Status */
pDDEdata->usFormat = DDEFMT_TEXT; /* Text format */
/* Go past end of structure for the name */
pDDEdata->offszItemName = sizeof(DDESTRUCT);
/* Go past end of structure (and name) for the data */
pDDEdata->offabData = sizeof(DDESTRUCT)+11;
strcpy((BYTE *)(pDDEdata+(pDDEdata->offabData)), szStatus);
WinDdePostMsg(hClientWnd,
hwnd,
WM_DDE_DATA,
pDDEdata,
DDEPM_RETRY);
}
else
{
ShowMessage("rejecting...");
pDDEdata->cbData = 0; /* Data length */
pDDEdata->fsStatus = DDE_NOTPROCESSED; /* Status */
pDDEdata->usFormat = DDEFMT_TEXT; /* Text format */
WinDdePostMsg(hClientWnd,
hwnd,
WM_DDE_ACK,
pDDEdata,
DDEPM_RETRY);
}
ShowMessage("sent...");