Submitting an Item to the Server
The client may send an item value to the server by using the
WM_DDE_POKE message. The client renders the item to be sent and sends the WM_DDE_POKE
message, as illustrated in the following example.
if (!(hPokeData = GlobalAlloc(GMEM_MOVEABLE | GMEM_DDESHARE,
(LONG) sizeof(DDEPOKE) + lstrlen(szValue) + 2)))
return;
if (!(lpPokeData = (DDEPOKE FAR*) GlobalLock(hPokeData))) {
GlobalFree(hPokeData);
return;
}
lpPokeData->fRelease = TRUE;
lpPokeData->cfFormat = CF_TEXT;
lstrcpy((LPSTR) lpPokeData->Value, (LPSTR) szValue);
/* Each line of CF_TEXT data is terminated by CR/LF. */
lstrcat((LPSTR) lpPokeData->Value, (LPSTR) "\r\n");
GlobalUnlock(hPokeData);
if ((atomItem = GlobalAddAtom((LPSTR) szItem)) != 0) {
.
.
.
if (!PostMessage(hwndServerDDE,
WM_DDE_POKE,
(WPARAM) hwndClientDDE,
PackDDElParam(WM_DDE_POKE, (UINT) hPokeData,
atomItem))) {
GlobalDeleteAtom(atomItem);
GlobalFree(hPokeData);
}
}
if (atomItem == 0) {
.
. /* error handling */
.
}
Note that sending data by using a
WM_DDE_POKE message is essentially the same as sending it by using
WM_DDE_DATA, except that WM_DDE_POKE is sent from the client to the server.
If the server is able to accept the data-item value in the format rendered by
the client, the server processes the item value as appropriate and sends the
client a positive
WM_DDE_ACK message. If it is unable to process the item value, because of its format or
for other reasons, the server sends the client a negative WM_DDE_ACK message.
UnpackDDElParam(WM_DDE_POKE, lParam, (PUINT) &hPokeData,
(PUINT) &atomItem);
GlobalGetAtomName(atomItem, szItemName, ITEM_NAME_MAX_SIZE);
if (!(lpPokeData = (DDEPOKE FAR*) GlobalLock(hPokeData))
|| lpPokeData->cfFormat != CF_TEXT
|| !IsItemSupportedByServer(szItemName)) {
PostMessage(hwndClientDDE,
WM_DDE_ACK,
(WPARAM) hwndServerDDE,
PackDDElParam(WM_DDE_ACK, 0, atomItem)); /* negative ACK */
}
lstrcpy(szItemValue, lpPokeData->Value); /* copies value */
bRelease = lpPokeData->fRelease;
GlobalUnlock(hPokeData);
if (bRelease) {
GlobalFree(hPokeData);
}
PostMessage(hwndClientDDE,
WM_DDE_ACK,
(WPARAM) hwndServerDDE,
PackDDElParam(WM_DDE_ACK,
0x8000, atomItem)); /* positive ACK */
In this example, the server calls
GlobalGetAtomName to retrieve the name of the item the client sent. The server then determines
whether it supports the item and whether the item is rendered in the correct
format (that is, CF_TEXT). If the item is not supported and not rendered in the
correct format, or if the server cannot lock the memory for the data, the server
sends a negative acknowledgment back to the client application. Note that in
this case, sending a negative acknowledgement is correct because
WM_DDE_POKE messages are always assumed to have the
fAckReq member set. The server should ignore the member.
If a server sends a negative acknowledgement in response to a WM_DDE_POKE
message, the client is responsible for freeing the memory (but not the
lParam parameter) referenced by the WM_DDE_POKE message associated with the negative
acknowledgement.
- Software for developers
-
Delphi Components
.Net Components
Software for Android Developers
- More information resources
-
MegaDetailed.Net
Unix Manual Pages
Delphi Examples
- Databases for Amazon shops developers
-
Amazon Categories Database
Browse Nodes Database