⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ddeml16.c

📁 Wine-20031016
💻 C
字号:
/* * DDEML library * * Copyright 1997 Alexandre Julliard * Copyright 1997 Len White * Copyright 1999 Keith Matthews * Copyright 2000 Corel * Copyright 2001,2002 Eric Pouech * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */#include <stdarg.h>#include <string.h>#include "windef.h"#include "winbase.h"#include "wine/windef16.h"#include "wingdi.h"#include "winuser.h"#include "winerror.h"#include "wownt32.h"#include "dde.h"#include "ddeml.h"#include "dde/dde_private.h"#include "wine/debug.h"WINE_DEFAULT_DEBUG_CHANNEL(ddeml);typedef HDDEDATA (CALLBACK *PFNCALLBACK16)(UINT16,UINT16,HCONV,HSZ,HSZ,HDDEDATA,                                           DWORD,DWORD);typedef struct{    UINT16  cb;    UINT16  wFlags;    UINT16  wCountryID;    INT16   iCodePage;    DWORD   dwLangID;    DWORD   dwSecurity;} CONVCONTEXT16, *LPCONVCONTEXT16;typedef struct{    DWORD          cb;    DWORD          hUser;    HCONV          hConvPartner;    HSZ            hszSvcPartner;    HSZ            hszServiceReq;    HSZ            hszTopic;    HSZ            hszItem;    UINT16         wFmt;    UINT16         wType;    UINT16         wStatus;    UINT16         wConvst;    UINT16         wLastError;    HCONVLIST      hConvList;    CONVCONTEXT16  ConvCtxt;} CONVINFO16, *LPCONVINFO16;static void map1632_conv_context(CONVCONTEXT* cc32, const CONVCONTEXT16* cc16){    cc32->cb = sizeof(*cc32);    cc32->wFlags = cc16->wFlags;    cc32->wCountryID = cc16->wCountryID;    cc32->iCodePage = cc16->iCodePage;    cc32->dwLangID = cc16->dwLangID;    cc32->dwSecurity = cc16->dwSecurity;}static void map3216_conv_context(CONVCONTEXT16* cc16, const CONVCONTEXT* cc32){    cc16->cb = sizeof(*cc16);    cc16->wFlags = cc32->wFlags;    cc16->wCountryID = cc32->wCountryID;    cc16->iCodePage = cc32->iCodePage;    cc16->dwLangID = cc32->dwLangID;    cc16->dwSecurity = cc32->dwSecurity;}/****************************************************************** *		WDML_InvokeCallback16 * * */HDDEDATA	WDML_InvokeCallback16(PFNCALLBACK pfn, UINT uType, UINT uFmt,                                      HCONV hConv, HSZ hsz1, HSZ hsz2,                                      HDDEDATA hdata, DWORD dwData1, DWORD dwData2){    DWORD               d1 = 0;    HDDEDATA            ret;    CONVCONTEXT16       cc16;    WORD args[16];    switch (uType)    {    case XTYP_CONNECT:    case XTYP_WILDCONNECT:        if (dwData1)        {            map3216_conv_context(&cc16, (const CONVCONTEXT*)dwData1);            d1 = MapLS(&cc16);        }        else        break;    default:        d1 = dwData1;        break;    }    args[15] = HIWORD(uType);    args[14] = LOWORD(uType);    args[13] = HIWORD(uFmt);    args[12] = LOWORD(uFmt);    args[11] = HIWORD(hConv);    args[10] = LOWORD(hConv);    args[9]  = HIWORD(hsz1);    args[8]  = LOWORD(hsz1);    args[7]  = HIWORD(hsz2);    args[6]  = LOWORD(hsz2);    args[5]  = HIWORD(hdata);    args[4]  = LOWORD(hdata);    args[3]  = HIWORD(d1);    args[2]  = LOWORD(d1);    args[1]  = HIWORD(dwData2);    args[0]  = LOWORD(dwData2);    WOWCallback16Ex( (DWORD)pfn, WCB16_PASCAL, sizeof(args), args, (DWORD *)&ret );    switch (uType)    {    case XTYP_CONNECT:    case XTYP_WILDCONNECT:        if (d1 != 0) UnMapLS(d1);        break;    }    return ret;}/****************************************************************************** *            DdeInitialize   (DDEML.2) */UINT16 WINAPI DdeInitialize16(LPDWORD pidInst, PFNCALLBACK16 pfnCallback,			      DWORD afCmd, DWORD ulRes){    return WDML_Initialize(pidInst, (PFNCALLBACK)pfnCallback, afCmd, ulRes,                           FALSE, TRUE);}/***************************************************************** *            DdeUninitialize   (DDEML.3) */BOOL16 WINAPI DdeUninitialize16(DWORD idInst){    return (BOOL16)DdeUninitialize(idInst);}/***************************************************************** * DdeConnectList [DDEML.4] */HCONVLIST WINAPI DdeConnectList16(DWORD idInst, HSZ hszService, HSZ hszTopic,				  HCONVLIST hConvList, LPCONVCONTEXT16 pCC16){    CONVCONTEXT	        cc;    CONVCONTEXT*	pCC = NULL;    if (pCC16)        map1632_conv_context(pCC = &cc, pCC16);    return DdeConnectList(idInst, hszService, hszTopic, hConvList, pCC);}/***************************************************************** * DdeQueryNextServer [DDEML.5] */HCONV WINAPI DdeQueryNextServer16(HCONVLIST hConvList, HCONV hConvPrev){    return DdeQueryNextServer(hConvList, hConvPrev);}/***************************************************************** *            DdeDisconnectList (DDEML.6) */BOOL16 WINAPI DdeDisconnectList16(HCONVLIST hConvList){    return (BOOL16)DdeDisconnectList(hConvList);}/***************************************************************** *		DdeQueryString (DDEML.23) */DWORD WINAPI DdeQueryString16(DWORD idInst, HSZ hsz, LPSTR lpsz, DWORD cchMax,                              INT16 codepage){    return DdeQueryStringA(idInst, hsz, lpsz, cchMax, codepage);}/***************************************************************** *            DdeConnect   (DDEML.7) */HCONV WINAPI DdeConnect16(DWORD idInst, HSZ hszService, HSZ hszTopic,                          LPCONVCONTEXT16 pCC16){    CONVCONTEXT	        cc;    CONVCONTEXT*	pCC = NULL;    if (pCC16)        map1632_conv_context(pCC = &cc, pCC16);    return DdeConnect(idInst, hszService, hszTopic, pCC);}/***************************************************************** *            DdeDisconnect   (DDEML.8) */BOOL16 WINAPI DdeDisconnect16(HCONV hConv){    return (BOOL16)DdeDisconnect(hConv);}/***************************************************************** *            DdeSetUserHandle (DDEML.10) */BOOL16 WINAPI DdeSetUserHandle16(HCONV hConv, DWORD id, DWORD hUser){    return DdeSetUserHandle(hConv, id, hUser);}/***************************************************************** *            DdeCreateDataHandle (DDEML.14) */HDDEDATA WINAPI DdeCreateDataHandle16(DWORD idInst, LPBYTE pSrc, DWORD cb,                                      DWORD cbOff, HSZ hszItem, UINT16 wFmt,				      UINT16 afCmd){    return DdeCreateDataHandle(idInst, pSrc, cb, cbOff, hszItem, wFmt, afCmd);}/***************************************************************** *            DdeCreateStringHandle   (DDEML.21) */HSZ WINAPI DdeCreateStringHandle16(DWORD idInst, LPCSTR str, INT16 codepage){    if  (codepage)    {        return DdeCreateStringHandleA(idInst, str, codepage);    }    else    {        TRACE("Default codepage supplied\n");        return DdeCreateStringHandleA(idInst, str, CP_WINANSI);    }}/***************************************************************** *            DdeFreeStringHandle   (DDEML.22) */BOOL16 WINAPI DdeFreeStringHandle16(DWORD idInst, HSZ hsz){    return (BOOL16)DdeFreeStringHandle(idInst, hsz);}/***************************************************************** *            DdeFreeDataHandle   (DDEML.19) */BOOL16 WINAPI DdeFreeDataHandle16(HDDEDATA hData){    return (BOOL16)DdeFreeDataHandle(hData);}/***************************************************************** *            DdeKeepStringHandle   (DDEML.24) */BOOL16 WINAPI DdeKeepStringHandle16(DWORD idInst, HSZ hsz){    return (BOOL)DdeKeepStringHandle(idInst, hsz);}/***************************************************************** *            DdeClientTransaction  (DDEML.11) */HDDEDATA WINAPI DdeClientTransaction16(LPVOID pData, DWORD cbData, HCONV hConv,                                       HSZ hszItem, UINT16 wFmt, UINT16 wType,                                       DWORD dwTimeout, LPDWORD pdwResult){    return DdeClientTransaction((LPBYTE)pData, cbData, hConv, hszItem,                                wFmt, wType, dwTimeout, pdwResult);}/***************************************************************** * *            DdeAbandonTransaction (DDEML.12) * */BOOL16 WINAPI DdeAbandonTransaction16(DWORD idInst, HCONV hConv, DWORD idTransaction){    return (BOOL16)DdeAbandonTransaction(idInst, hConv, idTransaction);}/***************************************************************** * DdePostAdvise [DDEML.13] */BOOL16 WINAPI DdePostAdvise16(DWORD idInst, HSZ hszTopic, HSZ hszItem){    return (BOOL16)DdePostAdvise(idInst, hszTopic, hszItem);}/***************************************************************** *            DdeAddData (DDEML.15) */HDDEDATA WINAPI DdeAddData16(HDDEDATA hData, LPBYTE pSrc, DWORD cb, DWORD cbOff){    return DdeAddData(hData, pSrc, cb, cbOff);}/***************************************************************** * DdeGetData [DDEML.16] */DWORD WINAPI DdeGetData16(HDDEDATA hData, LPBYTE pDst, DWORD cbMax, DWORD cbOff){    return DdeGetData(hData, pDst, cbMax, cbOff);}/***************************************************************** *            DdeAccessData (DDEML.17) */LPBYTE WINAPI DdeAccessData16(HDDEDATA hData, LPDWORD pcbDataSize){    FIXME("expect trouble\n");    /* FIXME: there's a memory leak here... */    return (LPBYTE)MapLS(DdeAccessData(hData, pcbDataSize));}/***************************************************************** *            DdeUnaccessData (DDEML.18) */BOOL16 WINAPI DdeUnaccessData16(HDDEDATA hData){    return DdeUnaccessData(hData);}/***************************************************************** *            DdeEnableCallback (DDEML.26) */BOOL16 WINAPI DdeEnableCallback16(DWORD idInst, HCONV hConv, UINT16 wCmd){    return DdeEnableCallback(idInst, hConv, wCmd);}/***************************************************************** *            DdeNameService  (DDEML.27) */HDDEDATA WINAPI DdeNameService16(DWORD idInst, HSZ hsz1, HSZ hsz2, UINT16 afCmd){    return DdeNameService(idInst, hsz1, hsz2, afCmd);}/***************************************************************** *            DdeGetLastError  (DDEML.20) */UINT16 WINAPI DdeGetLastError16(DWORD idInst){    return (UINT16)DdeGetLastError(idInst);}/***************************************************************** *            DdeCmpStringHandles (DDEML.36) */INT16 WINAPI DdeCmpStringHandles16(HSZ hsz1, HSZ hsz2){    return DdeCmpStringHandles(hsz1, hsz2);}/****************************************************************** *		DdeQueryConvInfo (DDEML.9) * */UINT16 WINAPI DdeQueryConvInfo16(HCONV hConv, DWORD idTransaction,                                 LPCONVINFO16 lpConvInfo){    CONVINFO    ci32;    CONVINFO16  ci16;    UINT        ret;    ci32.cb = sizeof(ci32);    ci32.ConvCtxt.cb = sizeof(ci32.ConvCtxt);    ret = DdeQueryConvInfo(hConv, idTransaction, &ci32);    if (ret == 0) return 0;    ci16.hUser = ci32.hUser;    ci16.hConvPartner = ci32.hConvPartner;    ci16.hszSvcPartner = ci32.hszSvcPartner;    ci16.hszServiceReq = ci32.hszServiceReq;    ci16.hszTopic = ci32.hszTopic;    ci16.hszItem = ci32.hszItem;    ci16.wFmt = ci32.wFmt;    ci16.wType = ci32.wType;    ci16.wStatus = ci32.wStatus;    ci16.wConvst = ci32.wConvst;    ci16.wLastError = ci32.wLastError;    ci16.hConvList = ci32.hConvList;    map3216_conv_context(&ci16.ConvCtxt, &ci32.ConvCtxt);    memcpy(lpConvInfo, &ci16, lpConvInfo->cb);    return lpConvInfo->cb;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -