亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? tech.txt

?? 中文編程語言——易語言(可視化編程
?? TXT
?? 第 1 頁 / 共 5 頁
字號:
                                          // 指針所指向數據的格式見前面的描述。
                                          // !!!只可讀取而不可更改其中的內容。

            DWORD         m_dwSubCodeAdr; // SDT_SUB_PTR,為子程序代碼地址指針。
            MUNIT         m_unit;         // 窗口單元、菜單數據類型的數據。

            void*         m_pCompoundData;// 復合數據類型數據指針,指針所指向數據的格式見前面的描述。
                                          // !!! 只可讀取而不可更改其中的內容。

            void*         m_pAryData;     // 數組數據指針,指針所指向數據的格式見前面的描述。
                                          // 注意如果為文本或字節集數組,則成員數據指針可能為NULL。
                                          // !!! 只可讀取而不可更改其中的內容。

            // 第二部分。
            // 為指向變量地址的指針,僅當參數具有AS_RECEIVE_VAR或AS_RECEIVE_VAR_ARRAY或
            // AS_RECEIVE_VAR_OR_ARRAY標志時才被使用。
            BYTE*   m_pByte;            // SDT_BYTE 數據類型變量的地址,下同。
            SHORT*  m_pShort;           // SDT_SHORT
            INT*    m_pInt;             // SDT_INT
            INT64*  m_pInt64;           // SDT_INT64
            FLOAT*  m_pFloat;           // SDT_FLOAT
            DOUBLE* m_pDouble;          // SDT_DOUBLE
            DATE*   m_pDate;            // SDT_DATE_TIME
            BOOL*   m_pBool;            // SDT_BOOL

            char**  m_ppText;           // SDT_TEXT,注意*m_ppText可能為NULL(代表空文本)。
                                        // 寫入新值之前必須釋放前值,例句:NotifySys (NRS_MFREE, (DWORD)*m_ppText)。
                                        // !!!不可直接更改*m_ppText所指向的內容,只能釋放原指針后設置入NULL(空文本)
                                        // 或使用NRS_MALLOC通知分配的新內存地址指針(下同)。

            LPBYTE* m_ppBin;            // SDT_BIN,注意*m_ppBin可能為NULL(代表空字節集)。
                                        // 寫入新值之前必須釋放前值,例句:NotifySys (NRS_MFREE, (DWORD)*m_ppBin)。
                                        // !!!不可直接更改*m_ppBin所指向的內容,只能釋放原指針后設置入NULL(空字節集)
                                        // 或新指針。

            DWORD*  m_pdwSubCodeAdr;    // SDT_SUB_PTR,子程序代碼地址變量地址。
            PMUNIT  m_pUnit;            // 窗口單元、菜單數據類型變量地址。

            void**  m_ppCompoundData;   // 復合數據類型變量地址。
                                        // !!!注意寫入新值之前必須使用NRS_MFREE通知逐一釋放所有成員(即:SDT_TEXT、
                                        // SDT_BIN及復合數據類型成員)及原地址指針。
                                        // !!!不可直接更改*m_ppCompoundData所指向的內容,只能釋放原指針后設置入新指針。

            void**  m_ppAryData;        // 數組數據變量地址,注意:
                                        // 1、寫入新值之前必須釋放原值,例句:NotifySys (NRS_FREE_ARY,
                                        //    m_dtDataType, (DWORD)*m_ppAryData),注意:此例句只適用于
                                        //    m_dtDataType為系統基本數據類型時的情況,如果為復合數據類型,
                                        //    必須根據其定義信息逐一釋放。
                                        // 2、如果為文本或字節集數組,則其中成員的數據指針可能為NULL。
                                        // !!!不可直接更改*m_ppAryData所指向的內容,只能釋放原指針后設置入新指針。
        };

        // 1、當用作傳遞參數數據時,如果該參數具有 AS_RECEIVE_VAR_OR_ARRAY 或
        //    AS_RECEIVE_ALL_TYPE_DATA 標志,且為數組數據,則包含標志 DT_IS_ARY ,
        //    這也是 DT_IS_ARY 標志的唯一使用場合。
        //    DT_IS_ARY 的定義為:
        //      #define    DT_IS_ARY   0x20000000
        // 2、當用作傳遞參數數據時,如果為空白數據,則為 _SDT_NULL 。
        DATA_TYPE m_dtDataType;
    };
    typedef MDATA_INF* PMDATA_INF;

    ///////////////////////////////////////////////

    下面給出一些具體的例子用來說明如何定義且實現全局命令,更多的例子請參見所提供的HtmlView支持庫的源代碼 。

    ///////////////////

        首先給出一些例子中被使用到的公共輔助函數的實現代碼:

        // 使用指定文本數據建立易程序中使用的文本數據。
        char* CloneTextData (char* ps)
        {
            if (ps == NULL || *ps == '\0')
                return NULL;

            INT nTextLen = strlen (ps);
            char* pd = (char*)NotifySys (NRS_MALLOC, (DWORD)(nTextLen + 1), 0);
            memcpy (pd, ps, nTextLen);
            pd [nTextLen] = '\0';
            return pd;
        }

        // 使用指定文本數據建立易程序中使用的文本數據。
        //   nTextLen用作指定文本部分的長度(不包含結束零),
        // 如果為-1,則取ps的全部長度。
        char* CloneTextData (char* ps, INT nTextLen)
        {
            if (nTextLen <= 0)
                return NULL;

            char* pd = (char*)NotifySys (NRS_MALLOC, (DWORD)(nTextLen + 1), 0);
            memcpy (pd, ps, nTextLen);
            pd [nTextLen] = '\0';
            return pd;
        }

        // 使用指定數據建立易程序中使用的字節集數據。
        LPBYTE CloneBinData (LPBYTE pData, INT nDataSize)
        {
            if (nDataSize == 0)
                return NULL;

            LPBYTE pd = (LPBYTE)NotifySys (NRS_MALLOC, (DWORD)(sizeof (INT) * 2 + nDataSize), 0);
            *(LPINT)pd = 1;
            *(LPINT)(pd + sizeof (INT)) = nDataSize;
            memcpy (pd + sizeof (INT) * 2, pData, nDataSize);
            return pd;
        }

        // 報告運行時錯誤。
        void GReportError (char* szErrText)
        {
            NotifySys (NRS_RUNTIME_ERR, (DWORD)szErrText, 0);
        }

        void* MMalloc (INT nSize)
        {
            return (void*)NotifySys (NRS_MALLOC, (DWORD)nSize, 0);
        }

        void MFree (void* p)
        {
            NotifySys (NRS_MFREE, (DWORD)p, 0);
        }

        // 返回數組的數據部分首地址及成員數目。
        LPBYTE GetAryElementInf (void* pAryData, LPINT pnElementCount)
        {
            LPINT pnData = (LPINT)pAryData;
            INT nArys = *pnData++;  // 取得維數。
            // 計算成員數目。
            INT nElementCount = 1;
            while (nArys > 0)
            {
                nElementCount *= *pnData++;
                nArys--;
            }

            if (pnElementCount != NULL)
                *pnElementCount = nElementCount;
            return (LPBYTE)pnData;
        }

        #define DTT_IS_NULL_DATA_TYPE   0
        #define DTT_IS_SYS_DATA_TYPE    1
        #define DTT_IS_USER_DATA_TYPE   2
        #define DTT_IS_LIB_DATA_TYPE    3
        // 取回數據類型的類別。
        INT GetDataTypeType (DATA_TYPE dtDataType)
        {
            if (dtDataType == _SDT_NULL)
                return DTT_IS_NULL_DATA_TYPE;

            DWORD dw = dtDataType & 0xC0000000;
            return dw == DTM_SYS_DATA_TYPE_MASK ? DTT_IS_SYS_DATA_TYPE :
                    dw == DTM_USER_DATA_TYPE_MASK ? DTT_IS_USER_DATA_TYPE :
                    DTT_IS_LIB_DATA_TYPE;
        }

        // 絕對不會返回NULL或者窗口句柄無效的CWnd*指針。
        CWnd* GetWndPtr (PMDATA_INF pInf)
        {
            return (CWnd*)NotifySys (NRS_GET_AND_CHECK_UNIT_PTR,
                    pInf [0].m_unit.m_dwFormID, pInf [0].m_unit.m_dwUnitID);
        }

    ///////////////////


    1、使用到 CMD_INFO 中的 CT_ALLOW_APPEND_NEW_ARG 標志的命令例子:
    2、返回系統基本數據類型的命令例子:

        // 求余數

        static ARG_INFO s_ArgInfo[] =
        {
            {
            /*name*/       _T("被除數"),
            /*explain*/    NULL,
            /*bmp inx*/    0,
            /*bmp num*/    0,
            /*type*/       SDT_DOUBLE,
            /*default*/    0,
            /*state*/      NULL,
            }, {
            /*name*/       _T("除數"),
            /*explain*/    NULL,
            /*bmp inx*/    0,
            /*bmp num*/    0,
            /*type*/       SDT_DOUBLE,
            /*default*/    0,
            /*state*/      NULL,
            },
        };

        static CMD_INFO s_CmdInfo =
        {
        /*name*/          _T("求余數"),
        /*egname*/        _T("mod"),
        /*explain*/       _T("求出兩個數值的商,并返回余數部分,運算符號為“%”或“Mod”"),
        /*category*/      2,
        /*state*/         CT_ALLOW_APPEND_NEW_ARG,
        /*ret*/           SDT_DOUBLE,
        /*reserved*/      0,
        /*level*/         LVL_SIMPLE,
        /*bmp inx*/       0,
        /*bmp num*/       0,
        /*ArgCount*/      2,
        /*arg lp*/        s_ArgInfo,
        },

        // 命令實現函數
        void fnMod (PMDATA_INF pRetData, INT nArgCount, PMDATA_INF pArgInf)
        {
            // 對于具有CT_ALLOW_APPEND_NEW_ARG標志的命令,需要讀取nArgCount以獲得實際參數數目。
            DOUBLE db = pArgInf [0].m_double;
            for (INT i = 1; i < nArgCount; i++)
            {
                pArgInf++;
                if (pArgInf->m_double == 0)
                    GReportError ("不能求余數于零");
                db = fmod (db, pArgInf->m_double);
            }

            // 設置返回的雙精度小數數據。
            pRetData->m_double = db;
        }

    ///////////////////

    3、使用到 CMD_INFO 中的 CT_RETURN_ARRAY_DATA 標志的命令例子:
    4、具有定義有 AS_DEFAULT_VALUE_IS_EMPTY 標志參數的命令例子:

        // 分割文本

        static ARG_INFO s_ArgInfo[] =
        {
            {
            /*name*/       _T("待分割文本"),
            /*explain*/    _T("如果參數值是一個長度為零的文本,則返回一個空數組,即沒有任何成員的數組"),
            /*bmp inx*/    0,
            /*bmp num*/    0,
            /*type*/       SDT_TEXT,
            /*default*/    0,
            /*state*/      NULL,
            }, {
            /*name*/       _T("用作分割的文本"),
            /*explain*/    _T("參數值用于標識子文本邊界。如果被省略,"
                      "則默認使用半角逗號字符作為分隔符。如果是一個長度為零的文本,則返回的數組"
                      "僅包含一個成員,即完整的“待分割文本”"),
            /*bmp inx*/    0,
            /*bmp num*/    0,
            /*type*/       SDT_TEXT,
            /*default*/    0,
            /*state*/      AS_DEFAULT_VALUE_IS_EMPTY,
            }, {
            /*name*/       _T("要返回的子文本數目"),
            /*explain*/    _T("如果被省略,則默認返回所有的子文本"),
            /*bmp inx*/    0,
            /*bmp num*/    0,
            /*type*/       SDT_INT,
            /*default*/    0,
            /*state*/       AS_DEFAULT_VALUE_IS_EMPTY,
            }
        };

        static CMD_INFO s_CmdInfo =
        {
        /*name*/        _T("分割文本"),
        /*egname*/      _T("split"),
        /*explain*/     _T("將指定文本進行分割,返回分割后的一維文本數組"),
        /*category*/    9,
        /*state*/       CT_RETRUN_ARY_TYPE_DATA,
        /*ret*/         SDT_TEXT,
        /*reserved*/    0,
        /*level*/       LVL_SIMPLE,
        /*bmp inx*/     0,
        /*bmp num*/     0,
        /*ArgCount*/    3,
        /*arg lp*/      s_ArgInfo,
        };

        // 命令實現函數
        void fnSplit (PMDATA_INF pRetData, INT nArgCount, PMDATA_INF pArgInf)
        {
            LPTSTR szBeSplited = pArgInf [0].m_pText;
            // 如果某個具有 AS_DEFAULT_VALUE_IS_EMPTY 標志的參數用戶程序中沒有為其提供參數值,
            // 則其數據類型為 _SDT_NULL 。
            LPTSTR szMark = pArgInf [1].m_dtDataType == _SDT_NULL ? _T(",") : pArgInf [1].m_pText;
            INT nCount = pArgInf [2].m_dtDataType == _SDT_NULL ? -1 : max (0, pArgInf [2].m_int);

            INT nLen1 = strlen (szBeSplited);
            INT nLen2 = strlen (szMark);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
制服丝袜亚洲精品中文字幕| 激情图片小说一区| 国产欧美精品一区| 日韩欧美国产一二三区| 欧美久久高跟鞋激| 欧美天堂一区二区三区| 色综合天天狠狠| 97精品视频在线观看自产线路二| 国产91精品露脸国语对白| 国产99久久久久| 97久久超碰精品国产| 色吊一区二区三区| 欧美色倩网站大全免费| 欧美丰满美乳xxx高潮www| 欧美精品电影在线播放| 欧美一级生活片| 久久久久久久综合色一本| 欧美精品一区二区三区久久久 | 日韩欧美一卡二卡| 欧美精品一区二区三| 国产精品久久久久久户外露出 | 亚洲国产成人av好男人在线观看| 亚洲成av人综合在线观看| 免费精品视频在线| 国产酒店精品激情| 99久久久国产精品免费蜜臀| 欧美私人免费视频| 26uuu另类欧美| 18涩涩午夜精品.www| 男女性色大片免费观看一区二区| 久久99精品久久久久婷婷| 成人久久18免费网站麻豆| 91美女视频网站| 91精品欧美综合在线观看最新 | 欧美日韩在线免费视频| 日韩三级精品电影久久久| 成人欧美一区二区三区1314| 污片在线观看一区二区| 成人国产精品免费观看动漫| 欧美视频一区二区三区四区 | 国产欧美日韩另类一区| 亚洲一区在线电影| 国产suv精品一区二区6| 欧美怡红院视频| 中文字幕不卡的av| 精品在线亚洲视频| 欧美性感一类影片在线播放| 国产亚洲一区二区三区四区| 亚洲成av人片| 色94色欧美sute亚洲线路二| 国产亚洲va综合人人澡精品| 午夜欧美在线一二页| 91美女片黄在线观看91美女| 久久精品网站免费观看| 丝瓜av网站精品一区二区| 91看片淫黄大片一级| 国产欧美一区二区三区在线老狼| 日韩高清不卡在线| 欧美日韩在线综合| 一区二区高清视频在线观看| 国产大片一区二区| 精品国产乱码久久久久久影片| 亚洲不卡av一区二区三区| 一本一道综合狠狠老| 中文字幕中文在线不卡住| 国产黄色91视频| 国产色产综合色产在线视频 | 精品裸体舞一区二区三区| 天涯成人国产亚洲精品一区av| 91久久国产最好的精华液| 亚洲欧洲无码一区二区三区| 国产精品自拍网站| 欧美经典一区二区| 国产aⅴ综合色| 国产日韩欧美综合一区| 粉嫩一区二区三区性色av| 久久久av毛片精品| 丰满少妇久久久久久久| 国产日韩亚洲欧美综合| 国精产品一区一区三区mba桃花| 精品久久久久久最新网址| 国产一区二区久久| 中文字幕不卡的av| 91国产福利在线| 午夜影视日本亚洲欧洲精品| 欧美日韩aaaaa| 强制捆绑调教一区二区| 精品美女被调教视频大全网站| 韩国女主播成人在线观看| 久久伊99综合婷婷久久伊| 日本韩国一区二区三区| 亚洲免费观看高清完整版在线观看熊 | www.日本不卡| 亚洲国产日韩在线一区模特 | 日韩欧美综合在线| 国产精品123区| 亚洲免费三区一区二区| 91.成人天堂一区| 国产剧情一区在线| 一区二区免费视频| 欧美sm美女调教| 91在线高清观看| 日韩专区欧美专区| 欧美韩日一区二区三区| 欧美主播一区二区三区美女| 亚洲永久免费视频| 久久人人超碰精品| 欧美性一级生活| 国内成人自拍视频| 亚洲一二三级电影| 国产欧美日韩亚州综合| 欧美在线观看视频在线| 国产一区视频导航| 亚洲成人免费av| 中文字幕巨乱亚洲| 欧美成人伊人久久综合网| 国产成人综合在线| 日本午夜一本久久久综合| 国产精品福利一区二区三区| 精品视频123区在线观看| 成人晚上爱看视频| 毛片一区二区三区| 亚洲bt欧美bt精品| 1区2区3区欧美| 久久久久久97三级| 日韩一级完整毛片| 91搞黄在线观看| 成人avav在线| 国产成人精品一区二区三区四区 | www.成人在线| 精品无人区卡一卡二卡三乱码免费卡| 亚洲美女免费在线| 亚洲国产精品成人综合色在线婷婷| 欧美丝袜第三区| 99国产一区二区三精品乱码| 国产曰批免费观看久久久| 日韩二区三区四区| 婷婷国产v国产偷v亚洲高清| 亚洲精品伦理在线| 亚洲欧洲成人精品av97| 国产无遮挡一区二区三区毛片日本| 欧美一区二区三区日韩视频| 欧美在线制服丝袜| 99精品欧美一区二区三区小说| 丁香啪啪综合成人亚洲小说| 韩国欧美国产1区| 国产在线一区观看| 国内外精品视频| 经典一区二区三区| 久久99精品久久久久婷婷| 另类欧美日韩国产在线| 日本成人中文字幕在线视频| 亚洲福利视频一区| 亚洲成人动漫av| 婷婷亚洲久悠悠色悠在线播放| 亚洲在线成人精品| 图片区小说区区亚洲影院| 天天做天天摸天天爽国产一区| 日韩专区中文字幕一区二区| 日本美女视频一区二区| 久久激五月天综合精品| 国产尤物一区二区在线| 国产大陆亚洲精品国产| yourporn久久国产精品| 色婷婷精品大在线视频 | 精品奇米国产一区二区三区| 亚洲精品一区二区在线观看| 久久久www免费人成精品| 国产精品毛片高清在线完整版| 亚洲日本免费电影| 午夜精品久久一牛影视| 精品一区二区在线视频| 国产成人午夜99999| 色综合色综合色综合色综合色综合 | 久久99精品久久久久婷婷| 激情欧美一区二区三区在线观看| 国产精品夜夜嗨| 91网站在线播放| 91精品国产高清一区二区三区| 日韩精品一区二区三区视频| 欧美激情在线一区二区| 亚洲中国最大av网站| 免费观看在线综合| 成人av第一页| 欧美一区二区视频网站| 中文字幕国产精品一区二区| 夜夜揉揉日日人人青青一国产精品| 五月天久久比比资源色| 国产aⅴ精品一区二区三区色成熟| 日本韩国一区二区三区| 日韩精品一区二区三区视频| 国产精品高潮久久久久无| 香蕉影视欧美成人| 不卡的av在线播放| 在线综合亚洲欧美在线视频| 国产精品不卡视频| 精品无人码麻豆乱码1区2区 | 国产福利精品一区| 欧美久久久久久久久久| 亚洲欧洲日韩av|