📄 wredde.c
字号:
int i;
if( IdInst != 0 ) {
DdeNameService( IdInst, (HSZ)NULL, (HSZ)NULL, DNS_UNREGISTER );
for( i=0; i<NUM_TOPICS;i++ ) {
if( Topics[i].htopic != (HSZ)NULL ) {
DdeFreeStringHandle( IdInst, Topics[i].htopic );
}
}
for( i=0; i<NUM_SERVERS;i++ ) {
if( EditServers[i].htopic != (HSZ)NULL ) {
DdeFreeStringHandle( IdInst, EditServers[i].htopic );
}
if( EditServers[i].hservice != (HSZ)NULL ) {
DdeFreeStringHandle( IdInst, EditServers[i].hservice );
}
}
if( hDialogDump != (HSZ)NULL ) {
DdeFreeStringHandle( IdInst, hDialogDump );
}
if( hImageDump != (HSZ)NULL ) {
DdeFreeStringHandle( IdInst, hImageDump );
}
if( hFileItem != (HSZ)NULL ) {
DdeFreeStringHandle( IdInst, hFileItem );
}
if( hIs32BitItem != (HSZ)NULL ) {
DdeFreeStringHandle( IdInst, hIs32BitItem );
}
if( hDataItem != (HSZ)NULL ) {
DdeFreeStringHandle( IdInst, hDataItem );
}
if( hNameItem != (HSZ)NULL ) {
DdeFreeStringHandle( IdInst, hNameItem );
}
if( hServiceName != (HSZ)NULL ) {
DdeFreeStringHandle( IdInst, hServiceName );
}
DdeUninitialize( IdInst );
}
if( DdeProc != (FARPROC)NULL ) {
FreeProcInstance( DdeProc );
}
}
Bool WREPokeData( HCONV conv, void *data, int size, Bool retry )
{
DWORD result;
UINT err;
Bool timeout;
Bool ret;
UINT tries;
if( ( conv == (HCONV)NULL ) || ( data == NULL ) || ( size == 0 ) ) {
return( FALSE );
}
if( retry )
tries = 8;
else
tries = 0;
while( TRUE ) {
ret = (Bool)
DdeClientTransaction( (LPBYTE)data, size, conv, hDataItem,
CF_TEXT, XTYP_POKE, LONG_TIME_OUT,
&result );
if( !ret && tries-- ) {
err = DdeGetLastError( IdInst );
timeout = ( ( err & DMLERR_POKEACKTIMEOUT ) != 0 );
if( !timeout ) {
break;
}
} else {
break;
}
}
return( ret );
}
HDDEDATA WINEXPORT DdeCallBack( WORD wType, WORD wFmt, HCONV hConv,
HSZ hsz1, HSZ hsz2, HDDEDATA hdata,
DWORD lData1, DWORD lData2 )
{
HDDEDATA ret;
HSZPAIR hszpair[2];
HSZ htopic;
HCONV htconv;
void *data;
uint_32 size;
Bool ok;
_wre_touch(hdata);
_wre_touch(lData1);
_wre_touch(lData2);
ret = (HDDEDATA)FALSE;
switch( wType ) {
case XTYP_CONNECT:
case XTYP_WILDCONNECT:
if( PendingService == NoServicePending ) {
htopic = (HSZ)NULL;
} else {
htopic = (HSZ)Topics[PendingService].htopic;
}
break;
}
switch( wType ) {
case XTYP_CONNECT_CONFIRM:
htconv = (HCONV)NULL;
if( PendingService != NoServicePending ) {
htconv = DdeConnect( IdInst,
EditServers[PendingService].hservice,
EditServers[PendingService].htopic,
(LPVOID)NULL );
}
if( htconv != (HCONV)NULL ) {
if( PendingService == DialogService ) {
ok = WRECommitDialogSession( hConv, htconv );
} else {
ok = WRECommitImageSession( hConv, htconv );
}
if( !ok ) {
DdeDisconnect( htconv );
DdeDisconnect( hConv );
}
} else {
DdeDisconnect( hConv );
}
break;
case XTYP_DISCONNECT:
if( !WREEndEditImageResource( hConv ) ) {
WREEndEditDialogResource( hConv );
}
break;
case XTYP_CONNECT:
if( hsz1 == hDialogDump ) {
WREDumpPendingDialogSession();
} else if( hsz1 == hImageDump ) {
WREDumpPendingImageSession();
} else if( hsz1 == htopic ) {
ret = (HDDEDATA)TRUE;
}
break;
case XTYP_WILDCONNECT:
if( hsz2 != hServiceName ) {
break;
}
if( htopic == (HSZ)NULL ) {
break;
}
hszpair[0].hszSvc = hServiceName;
hszpair[0].hszTopic = htopic;
hszpair[1].hszSvc = (HSZ)NULL;
hszpair[1].hszTopic = (HSZ)NULL;
ret = (HDDEDATA)
DdeCreateDataHandle( IdInst, (LPBYTE)&hszpair[0],
sizeof(hszpair), 0L, 0, CF_TEXT, 0 );
break;
case XTYP_REQUEST:
data = NULL;
size = 0;
ok = FALSE;
if( hsz1 == Topics[DialogService].htopic ) {
if( hsz2 == hFileItem ) {
ok = WREGetDlgSessionFileName( hConv, &data, &size );
} else if( hsz2 == hDataItem ) {
ok = WREGetDlgSessionData( hConv, &data, &size );
} else if( hsz2 == hNameItem ) {
ok = WREGetDlgSessionResName( hConv, &data, &size );
} else if( hsz2 == hIs32BitItem ) {
ok = WREGetDlgSessionIs32Bit( hConv, &data, &size );
}
} else if( ( hsz1 == Topics[BitmapService].htopic ) ||
( hsz1 == Topics[CursorService].htopic ) ||
( hsz1 == Topics[IconService].htopic ) ) {
if( hsz2 == hFileItem ) {
ok = WREGetImageSessionFileName( hConv, &data, &size );
} else if( hsz2 == hDataItem ) {
ok = WREGetImageSessionData( hConv, &data, &size );
} else if( hsz2 == hNameItem ) {
ok = WREGetImageSessionResName( hConv, &data, &size );
}
}
if( data ) {
if( ok ) {
ret = DdeCreateDataHandle( IdInst, (LPBYTE)data,
size, 0, hsz2, wFmt, 0 );
}
WREMemFree( data );
}
break;
case XTYP_POKE:
data = NULL;
size = 0;
ok = FALSE;
ret = (HDDEDATA)DDE_FNOTPROCESSED;
if( hsz1 == Topics[DialogService].htopic ) {
if( hsz2 == hDataItem ) {
ok = WRESetDlgSessionResData( hConv, hdata );
} else if( hsz2 == hNameItem ) {
ok = WRESetDlgSessionResName( hConv, hdata );
}
} else if( ( hsz1 == Topics[BitmapService].htopic ) ||
( hsz1 == Topics[CursorService].htopic ) ||
( hsz1 == Topics[IconService].htopic ) ) {
if( hsz2 == hDataItem ) {
ok = WRESetImageSessionResData( hConv, hdata );
} else if( hsz2 == hNameItem ) {
ok = WRESetImageSessionResName( hConv, hdata );
}
}
ret = (HDDEDATA)DDE_FACK;
break;
}
return( ret );
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -