OS2.org Site Index - Feedback - Impressum
Sprachauswahl / Choose your Language News Software Hardware Projekte Forum Tipps Links Verschiedenes
Editorial Diskussion HelpDesk Umfrage
[Forum]
in nach (Erweiterte Suche)
[Forum]
( Archiv ) ( Neues Thema )
16.03.2005
DDE Source (10:25:52) « ^ »
Auf der Server-Seite:

#define INCL_WIN

#include <os2.h>
#include <string.h> /* Standard-biblioteker */
#include <stdlib.h> /* */
#include <memory.h> /* */
#include <stdio.h> /* */
#include <process.h> /* */


#define szClass "OX400"
#define szTitel "DDE-Statement til Ekspedition"

/* ----------------------------------------------------------------------- */
/* -- Variable ----------------------------------------------------------- */
/* ----------------------------------------------------------------------- */
/* ---------------------- */
HAB hab; /* Handle - Anchor Block */
HMQ hMQ; /* Handle - Message Queue */
HWND hwndFrame; /* Handle - frame */
HWND hwndClient; /* Handle - client */
CHAR szTemp[80];

/* ----------------------------------------------------------------------- */
/* -- Dan DDE-struktur --------------------------------------------------- */
/* ----------------------------------------------------------------------- */
PDDESTRUCT MakeDDESegment(
HWND hwndDest,
PSZ pszItemName,
USHORT fsStatus,
USHORT usFormat,
PVOID pabData,
USHORT usDataLen
)
{
PDDESTRUCT pddes;
USHORT usItemLen;
USHORT usTotalLen;
SEL selBuf;
SEL selShared;
USHORT receiverPID;
USHORT receiverTID;

usItemLen = _fstrlen((char _far *)pszItemName) + 1;
usTotalLen = sizeof(DDESTRUCT) + usItemLen + usDataLen;

/* Opret DDE SEGMENT JOHNNY */
if( !DosAllocSeg( usTotalLen, &selBuf, SEG_GIVEABLE) )
{
/* Konverter SELECTOR til en c-pointer og udfyld aralet JOHNNY */
pddes = SELTOPDDES(selBuf);
pddes->cbData = usTotalLen;
pddes->fsStatus = fsStatus;
pddes->usFormat = usFormat;
pddes->offszItemName = sizeof(DDESTRUCT);
if( (usDataLen) && (pabData))
pddes->offabData = sizeof(DDESTRUCT) + usItemLen;
else
pddes->offabData = 0;

/* Her bruges farstrcopy istedet for strcopy da arealet kan ligge
langt væk, ITEMNAME er pænt nultermineret, defor strcopy(), mens
det er op til den enkelte programmør at lave en pæn afslutning, og
det kan vi ikke stole på at alle gør derfor memcopy() på data
arealet JOHNNY */
_fstrcpy((char _far *)DDES_PSZITEMNAME(pddes), (char _far *)pszItemName);

memcpy((char _far *)DDES_PABDATA(pddes), (char _far *)pabData, usDataLen);

/* Spørg handle pointeren som vi fik i DDE-initiate, hvilken processid
og threadid som i sin tid skabte handlen JOHNNY */

WinQueryWindowProcess(hwndDest, &receiverPID, &receiverTID);

/* Giv den modtagende process adgang til SEGMENTET SELBUF JOHNNY */
if( !DosGiveSeg(selBuf, receiverPID, &selShared) )
{
/* Lav endnu en c-pointer til segmentet som returneres og sende i DDE
meddelelsen senere. Det er denne pointer som den modtagende handle
benytter når den skal smage på dataene, da det ikke er selve data-
arealet som sende til den modtagende handle men kun en c-pointer
til det shared segment JOHNNY */
pddes = SELTOPDDES( selShared );
return (pddes);
}
}

return (NULL);
}

/* ----------------------------------------------------------------------- */
/* -- Message-loop for main-vindue --------------------------------------- */
/* ----------------------------------------------------------------------- */
MRESULT EXPENTRY Msgloop(
HWND hwnd ,
USHORT msg ,
MPARAM mp1 ,
MPARAM mp2 )
{
HPS hPS;
RECTL rectl;
HWND servhWnd;
int iRc;

PDDESTRUCT prc;

/* --------------------------------------------------------------------- */
switch(msg) {

/* -- WM_Create -------------------------------------------------------- */

case WM_CREATE:

WinPostMsg( hwnd, WM_USER, 0L, 0L );

break;

/* -- WM_USER ---------------------------------------------------------- */

case WM_USER:

iRc=WinDdeInitiate( hwnd, "EKSP", "ENGA" );

break;

/* -- WM_DDE_INITIATE_ACK ---------------------------------------------- */

case WM_DDE_INITIATEACK:

servhWnd = HWNDFROMMP( mp1 );

prc = MakeDDESegment(
servhWnd,
(PSZ)"EKSP",
0,
DDEFMT_TEXT,
(void*)szTemp,
24
);

iRc = WinDdePostMsg( servhWnd, hwnd, WM_DDE_EXECUTE, prc, TRUE );

WinPostMsg( hwnd, WM_DDE_TERMINATE, 0L, 0L );

/*
This is the solution suggested according to point2 in the report of pmr38043 i.e "Application does the cleanup"
DosFreeMem(mp2);

*/

break;

/* -- WM_DDE_TERMINATE ------------------------------------------------- */

case WM_DDE_TERMINATE:

WinPostMsg( hwnd, WM_CLOSE, 0L, 0L );

break;

/* -- WM_PAINT --------------------------------------------------------- */

case WM_PAINT:

hPS = WinBeginPaint(hwnd, 0, 0);

WinQueryWindowRect(hwnd, &rectl);

WinFillRect( hPS, &rectl, CLR_BACKGROUND);

WinEndPaint(hPS);

break;

/* -- Default -------------------------------------------------------- */

/* default:

return(WinDefWindowProc(hwnd, msg, mp1,mp2));

break; */ /* Not required to do this here : pmr38043 */


}
/* This is the solution suggested according to point1 in the report of pmr38043 i.e "Allowing PM to do the cleanup" */
return(WinDefWindowProc(hwnd, msg, mp1,mp2));
}

/* ----------------------------------------------------------------------- */
/* -- Start programmet --------------------------------------------------- */
/* ----------------------------------------------------------------------- */
void DDE_EKSP()
{
QMSG qmsg;
SHORT rc;
LONG ulFlag;

if ( (hab = WinInitialize(0) ) == 0 )
return;

if ( (hMQ = WinCreateMsgQueue(hab, 0)) == 0)
return;

rc = WinRegisterClass(
hab ,
(PCH)szClass ,
(PFNWP)Msgloop ,
CS_CLIPCHILDREN |
CS_SIZEREDRAW ,
0 );

if ( rc == FALSE )
return;

/* -- Sæt frame flags -------------------------------------------------- */

ulFlag =
FCF_TITLEBAR |
FCF_SYSMENU |
FCF_MINBUTTON |
FCF_SIZEBORDER |
FCF_NOBYTEALIGN ;

/* -- Dan vindue ------------------------------------------------------- */

hwndFrame = WinCreateStdWindow(
HWND_DESKTOP,
0 ,
&ulFlag,
szClass,
szTitel,
WS_MINIMIZED,
0,
100,
(HWND FAR *)hwndClient);

/* -- Sæt vinduet aktivt ----------------------------------------------- */

WinSetActiveWindow( HWND_DESKTOP, hwndFrame );

/* -- Main loop -------------------------------------------------------- */

while(WinGetMsg(hab, (PQMSG)&qmsg, 0, 0, 0))
WinDispatchMsg(hab,(PQMSG)&qmsg);

/* -- Luk vindue ------------------------------------------------------- */

WinDestroyWindow(hwndFrame);
WinDestroyMsgQueue(hMQ);
WinTerminate(hab);
}

void cdecl main()
{
USHORT usRc;
CHAR szBuffer[255];

while( 1==1 ) {
DDE_EKSP( );
for ( usRc = 0; usRc < 10000; usRc++ )
{
strcpy( szBuffer, szBuffer );
}
}
}




#define INCL_WIN

#include <os2.h>
#include <string.h> /* Standard-biblioteker */
#include <stdlib.h> /* */
#include <memory.h> /* */
#include <stdio.h> /* */
#include <process.h> /* */


#define szClass "OX400"
#define szTitel "DDE-Statement til Ekspedition"

/* ----------------------------------------------------------------------- */
/* -- Variable ----------------------------------------------------------- */
/* ----------------------------------------------------------------------- */
/* ---------------------- */
HAB hab; /* Handle - Anchor Block */
HMQ hMQ; /* Handle - Message Queue */
HWND hwndFrame; /* Handle - frame */
HWND hwndClient; /* Handle - client */
CHAR szTemp[80];

/* ----------------------------------------------------------------------- */
/* -- Dan DDE-struktur --------------------------------------------------- */
/* ----------------------------------------------------------------------- */
PDDESTRUCT MakeDDESegment(
HWND hwndDest,
PSZ pszItemName,
USHORT fsStatus,
USHORT usFormat,
PVOID pabData,
USHORT usDataLen
)
{
PDDESTRUCT pddes;
USHORT usItemLen;
USHORT usTotalLen;
SEL selBuf;
SEL selShared;
USHORT receiverPID;
USHORT receiverTID;

usItemLen = _fstrlen((char _far *)pszItemName) + 1;
usTotalLen = sizeof(DDESTRUCT) + usItemLen + usDataLen;

/* Opret DDE SEGMENT JOHNNY */
if( !DosAllocSeg( usTotalLen, &selBuf, SEG_GIVEABLE) )
{
/* Konverter SELECTOR til en c-pointer og udfyld aralet JOHNNY */
pddes = SELTOPDDES(selBuf);
pddes->cbData = usTotalLen;
pddes->fsStatus = fsStatus;
pddes->usFormat = usFormat;
pddes->offszItemName = sizeof(DDESTRUCT);
if( (usDataLen) && (pabData))
pddes->offabData = sizeof(DDESTRUCT) + usItemLen;
else
pddes->offabData = 0;

/* Her bruges farstrcopy istedet for strcopy da arealet kan ligge
langt væk, ITEMNAME er pænt nultermineret, defor strcopy(), mens
det er op til den enkelte programmør at lave en pæn afslutning, og
det kan vi ikke stole på at alle gør derfor memcopy() på data
arealet JOHNNY */
_fstrcpy((char _far *)DDES_PSZITEMNAME(pddes), (char _far *)pszItemName);

memcpy((char _far *)DDES_PABDATA(pddes), (char _far *)pabData, usDataLen);

/* Spørg handle pointeren som vi fik i DDE-initiate, hvilken processid
og threadid som i sin tid skabte handlen JOHNNY */

WinQueryWindowProcess(hwndDest, &receiverPID, &receiverTID);

/* Giv den modtagende process adgang til SEGMENTET SELBUF JOHNNY */
if( !DosGiveSeg(selBuf, receiverPID, &selShared) )
{
/* Lav endnu en c-pointer til segmentet som returneres og sende i DDE
meddelelsen senere. Det er denne pointer som den modtagende handle
benytter når den skal smage på dataene, da det ikke er selve data-
arealet som sende til den modtagende handle men kun en c-pointer
til det shared segment JOHNNY */
pddes = SELTOPDDES( selShared );
return (pddes);
}
}

return (NULL);
}

/* ----------------------------------------------------------------------- */
/* -- Message-loop for main-vindue --------------------------------------- */
/* ----------------------------------------------------------------------- */
MRESULT EXPENTRY Msgloop(
HWND hwnd ,
USHORT msg ,
MPARAM mp1 ,
MPARAM mp2 )
{
HPS hPS;
RECTL rectl;
HWND servhWnd;
int iRc;

PDDESTRUCT prc;

/* --------------------------------------------------------------------- */
switch(msg) {

/* -- WM_Create -------------------------------------------------------- */

case WM_CREATE:

WinPostMsg( hwnd, WM_USER, 0L, 0L );

break;

/* -- WM_USER ---------------------------------------------------------- */

case WM_USER:

iRc=WinDdeInitiate( hwnd, "EKSP", "ENGA" );

break;

/* -- WM_DDE_INITIATE_ACK ---------------------------------------------- */

case WM_DDE_INITIATEACK:

servhWnd = HWNDFROMMP( mp1 );

prc = MakeDDESegment(
servhWnd,
(PSZ)"EKSP",
0,
DDEFMT_TEXT,
(void*)szTemp,
24
);

iRc = WinDdePostMsg( servhWnd, hwnd, WM_DDE_EXECUTE, prc, TRUE );

WinPostMsg( hwnd, WM_DDE_TERMINATE, 0L, 0L );

/*
This is the solution suggested according to point2 in the report of pmr38043 i.e "Application does the cleanup"
DosFreeMem(mp2);

*/

break;

/* -- WM_DDE_TERMINATE ------------------------------------------------- */

case WM_DDE_TERMINATE:

WinPostMsg( hwnd, WM_CLOSE, 0L, 0L );

break;

/* -- WM_PAINT --------------------------------------------------------- */

case WM_PAINT:

hPS = WinBeginPaint(hwnd, 0, 0);

WinQueryWindowRect(hwnd, &rectl);

WinFillRect( hPS, &rectl, CLR_BACKGROUND);

WinEndPaint(hPS);

break;

/* -- Default -------------------------------------------------------- */

/* default:

return(WinDefWindowProc(hwnd, msg, mp1,mp2));

break; */ /* Not required to do this here : pmr38043 */


}
/* This is the solution suggested according to point1 in the report of pmr38043 i.e "Allowing PM to do the cleanup" */
return(WinDefWindowProc(hwnd, msg, mp1,mp2));
}

/* ----------------------------------------------------------------------- */
/* -- Start programmet --------------------------------------------------- */
/* ----------------------------------------------------------------------- */
void DDE_EKSP()
{
QMSG qmsg;
SHORT rc;
LONG ulFlag;

if ( (hab = WinInitialize(0) ) == 0 )
return;

if ( (hMQ = WinCreateMsgQueue(hab, 0)) == 0)
return;

rc = WinRegisterClass(
hab ,
(PCH)szClass ,
(PFNWP)Msgloop ,
CS_CLIPCHILDREN |
CS_SIZEREDRAW ,
0 );

if ( rc == FALSE )
return;

/* -- Sæt frame flags -------------------------------------------------- */

ulFlag =
FCF_TITLEBAR |
FCF_SYSMENU |
FCF_MINBUTTON |
FCF_SIZEBORDER |
FCF_NOBYTEALIGN ;

/* -- Dan vindue ------------------------------------------------------- */

hwndFrame = WinCreateStdWindow(
HWND_DESKTOP,
0 ,
&ulFlag,
szClass,
szTitel,
WS_MINIMIZED,
0,
100,
(HWND FAR *)hwndClient);

/* -- Sæt vinduet aktivt ----------------------------------------------- */

WinSetActiveWindow( HWND_DESKTOP, hwndFrame );

/* -- Main loop -------------------------------------------------------- */

while(WinGetMsg(hab, (PQMSG)&qmsg, 0, 0, 0))
WinDispatchMsg(hab,(PQMSG)&qmsg);

/* -- Luk vindue ------------------------------------------------------- */

WinDestroyWindow(hwndFrame);
WinDestroyMsgQueue(hMQ);
WinTerminate(hab);
}

void cdecl main()
{
USHORT usRc;
CHAR szBuffer[255];

while( 1==1 ) {
DDE_EKSP( );
for ( usRc = 0; usRc < 10000; usRc++ )
{
strcpy( szBuffer, szBuffer );
}
}
}

*******************************************************************
Auf der Seite des Clients:
********************************************************************

#define INCL_WIN

#include <os2.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>


#define szClass "OX400"
#define szTitel "DDE-Statement til Ekspedition"

/* -- Globale variable --------------------------------------------------- */

PDDESTRUCT pddes;

/* ----------------------------------------------------------------------- */
/* -- Variable ----------------------------------------------------------- */
/* ----------------------------------------------------------------------- */
/* ---------------------- */
HAB hab; /* Handle - Anchor Block */
HMQ hMQ; /* Handle - Message Queue */
HWND hwndFrame; /* Handle - frame */
HWND hwndClient; /* Handle - client */
/* ----------------------------------------------------------------------- */
/* -- Message-loop for main-vindue --------------------------------------- */
/* ----------------------------------------------------------------------- */
MRESULT EXPENTRY Msgloop(
HWND hwnd ,
USHORT msg ,
MPARAM mp1 ,
MPARAM mp2 )
{
HPS hPS;
RECTL rectl;
int iRc;

/* --------------------------------------------------------------------- */
switch(msg) {

/* -- WM_Create -------------------------------------------------------- */

case WM_CREATE:

WinPostMsg( hwnd, WM_USER, 0L, 0L );

break;

/* -- WM_USER ---------------------------------------------------------- */

case WM_USER:

iRc=WinDdeInitiate( hwnd, "EKSP", "ENGA" );

break;


/* -- WM_DDE_INITIATE -------------------------------------------------- */

case WM_DDE_INITIATE:

iRc = (int)WinDdeRespond( HWNDFROMMP(mp1), hwnd, ((DDEINIT*)mp2)->pszAppName, ((DDEINIT*)mp2)->pszTopic);

/*
This is the solution suggested according to point2 in the report of pmr38043 i.e "Application does the cleanup"
DosFreeMem(mp2);

*/

break;


case WM_DDE_EXECUTE:
pddes = (PDDESTRUCT)mp2;
iRc = DosFreeSeg(PDDESTOSEL(pddes));

return 0;

break;

/* -- WM_PAINT --------------------------------------------------------- */

case WM_PAINT:

hPS = WinBeginPaint(hwnd, 0, 0);

WinQueryWindowRect(hwnd, &rectl);

WinFillRect( hPS, &rectl, CLR_BACKGROUND);

WinEndPaint(hPS);

break;

/* -- Default -------------------------------------------------------- */

/* default:

return(WinDefWindowProc(hwnd, msg, mp1,mp2));

break; */ /* Not required to do this here : pmr38043 */


}
/* This is the solution suggested according to point1 in the report of pmr38043 i.e "Allowing PM to do the cleanup" */
return(WinDefWindowProc(hwnd, msg, mp1,mp2));
}

/* ----------------------------------------------------------------------- */
/* -- Start programmet --------------------------------------------------- */
/* ----------------------------------------------------------------------- */
void main( )
{
QMSG qmsg;
SHORT rc;
LONG ulFlag;

if ( (hab = WinInitialize(0) ) == 0 )
return;

if ( (hMQ = WinCreateMsgQueue(hab, 0)) == 0)
return;

rc = WinRegisterClass(
hab ,
(PCH)szClass ,
(PFNWP)Msgloop ,
CS_CLIPCHILDREN |
CS_SIZEREDRAW ,
0 );

if ( rc == FALSE )
{
WinMessageBox(
HWND_DESKTOP ,
HWND_DESKTOP ,
"Kan ikke registrere Window-Class",
0 ,
0 ,
MB_OK |
MB_ICONEXCLAMATION );

return;
}

ulFlag =
FCF_TITLEBAR |
FCF_SYSMENU |
FCF_MINBUTTON |
FCF_SIZEBORDER |
FCF_NOBYTEALIGN ;

hwndFrame = WinCreateStdWindow(
HWND_DESKTOP,
0 ,
&ulFlag,
szClass,
szTitel,
WS_MINIMIZED,
0,
100,
(HWND FAR *)hwndClient);

/* -- Sæt vinduet aktivt ----------------------------------------------- */

WinSetActiveWindow( HWND_DESKTOP, hwndFrame );

/* -- Main loop -------------------------------------------------------- */
while(WinGetMsg(hab, (PQMSG)&qmsg, 0, 0, 0))
WinDispatchMsg(hab,(PQMSG)&qmsg);

/* -- Luk vindue ------------------------------------------------------- */
WinDestroyWindow(hwndFrame);
WinDestroyMsgQueue(hMQ);
WinTerminate(hab);
}




























[ Leser: 31 ]

Datum Thema
07.01.2017 *

*

Name: * eMail: Benachrichtigung

Mit * markierte Felder müssen ausgefüllt werden !

( Zeige alle Einträge ) ( Zur Startübersicht )
Thema von: Leser Datum Zeit
 Win3.11 Browser probs
Alexander15409.09.199900:00
 Re: Win3.11 Browser probs
Alexander Beyrer4610.09.199900:00
 DDE Source

3116.03.200510:25
 Re: Re: Win3.11 Browser probs
Guenther4010.09.199900:00
 Re: Re: Re: Win3.11 Browser probs
Alexander4210.09.199900:00
 Re: Re: Re: Re: Win3.11 Browser probs
Guenther4313.09.199900:00
 Hallo Guenter
Alexander Beyrer4314.09.199900:00
 Re: Hallo Guenter
Alexander4415.09.199900:00
 Re: Re: Hallo Guenter
Guenther4116.09.199900:00
 Re: Re: Re: Hallo Guenter
Alexander4016.09.199900:00
 Wenn man unter WINSO2 das Internet nutzen will, so...
Gerhard Arnecke4618.09.199900:00


php.net OpenIT © 1998-2017 by WebTeam OS2.org