VFP幫助中的FLL資料_第1頁
VFP幫助中的FLL資料_第2頁
VFP幫助中的FLL資料_第3頁
VFP幫助中的FLL資料_第4頁
VFP幫助中的FLL資料_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、一、將參數傳遞到 Visual FoxPro API 函數1二、如何從 ActiveX 控件和 FLL 庫返回值2三、外部庫的參數4四、創(chuàng)建 Visual FoxPro 動態(tài)鏈接庫8五、訪問 Visual FoxPro 的變量和字段10六、用 Visual FoxPro API 管理內存11七、如何管理內存12八、FoxInfo 結構13一、將參數傳遞到 Visual FoxPro API 函數Visual FoxPro API 例程常常需要特定 Visual FoxPro 數據結構的參數。下列部分提供了 Visual FoxPro 數據類型和附加數據結構的列表。有關實際的類型定義和結構定義,

2、參考 Pro_ext.h 文件。Visual FoxPro API 數據類型下列數據類型可用于 Visual FoxPro API 例程。數據類型說明EDLINE編輯窗口中打開文件中的行號。第一行是 1。EDPOS編輯窗口中打開文件中字符的偏移位置。該文件或備注文件中第一個字符的偏移位置是 0。FCHAN文件通道。每個由 Visual FoxPro 或使用 _FCreate( ) 和 _FOpen( ) 通過 API 打開的文件都被指派一個 FCHAN。FPFI指向返回整數值函數的 32 位指針。ITEMID指派給菜單上單個命令的唯一標識符。MENUID指派給菜單的唯一標識符。MHANDLE給

3、予每個由 Visual FoxPro 或使用 _AllocHand( ) 通過 API 分配的內存塊的唯一標識符??梢允褂?_HandToPtr( ) 放棄對指針的引用。 NTI命名表索引。每個變量和表字段名都擁有該表中的一項。WHANDLE窗口句柄。指派給由 Visual FoxPro 或使用 _WOpen( ) 通過 API 打開窗口的唯一標識符。 注意:由于 FAR 指針不適合于 32 位編譯器,Pro_ext.h 中的 #define 語句將 FAR、_far 和 _far 重新定義為 null 值。 Visual FoxPro API 數據結構下表列示了 Visual Fo

4、xPro API 庫中使用的主要數據結構。結構說明EventRec用于描述給定時間上系統(tǒng)正在進行什么操作的結構。FoxInfo用于 FLL 庫中 Visual FoxPro 和程序間的通訊,不能用于 .ocx 文件。FoxTable用于 FLL 庫中 Visual FoxPro 和程序間的通訊,不能用于 .ocx 文件。Locator用于訪問參數值(FLL)或 Visual FoxPro 變量或字段(FLL 和 ocx)的結構。ParamBlk用于 FLL 庫中 Visual FoxPro 和程序間的通訊,不能用于 .ocx 文件。Parameter用于 FLL 庫中 Visual FoxPr

5、o 和程序間的通訊,不能用于 .ocx 文件。Point定義屏幕上單個點的水平和垂直坐標的結構。以行和列指定坐標。Rect定義屏幕上矩形坐標的結構。矩形的左上角坐標由(top,left)定義,而右下角由 (bottom-1,right-1)定義。以行和列指定坐標。Value用于訪問參數值(FLL)或 Visual FoxPro 變量或字段 (FLL 和 OCX)的結構。二、如何從 ActiveX 控件和 FLL 庫返回值可以將值從 ActiveX 控件或 Visual FoxPro 動態(tài)連接庫(FLL) 中返回到 Visual FoxPro。要將值從 ActiveX 控件返回到 Visual

6、FoxPro在該控件中使用 RETURN 語句并傳遞單個值。下列示例使用 RETURN 語句返回存儲在 VERSION 中的版本號:復制代碼#define VERSION 101/ 此處是其他代碼long CPyCtrl:GetVersion() / 在變量 fVersion 中設置版本號 return VERSION;從 FLL 庫中返回值當要從 FLL 庫中返回值時,請使用 API 函數,而不是 C 或 C+ 本身的命令。注意:當從 ActiveX 控件 (.ocx) 文件中返回值時,不要使用 API 函數從該 FLL 庫中返回值,而使用 RETURN 語句。 要從 FLL 庫中

7、返回值使用下表所列示的 API 函數。下列 API 函數只能用于 FLL 庫。函數說明_RetChar(char *string)設置函數返回值為 NULL 結尾的串。_RetCurrency(CCY cval, int width)設置函數返回值為貨幣值。_RetDateStr(char *string)設置函數返回值為日期。該日期以 mm/dd/yyyy 格式指定。_RetDateTimeStr(char *string)設置函數返回值為以 mm/dd/yyyy hh:mm:ss 格式指定的日期和時間。_RetFloat(double flt, int width, int dec)設置函

8、數返回值為為浮點值。_RetInt(long ival, int width)設置函數返回值為數字值。_RetLogical(int flag)設置函數返回值為邏輯值。零被當作假(FALSE)。任何非零值都被當作真(TRUE)。_RetVal(Value *val)傳遞完整的 Visual FoxPro Value 結構,可以返回除備注型以外的任何 Visual FoxPro 數據類型。必須調用 _RetVal( ) 來返回包含內置 null 字符的串或 .NULL. 值。注意:要返回對象數據類型的值,請使用 _RetVal() 函數填充 Value 結構的 ev_object 字段。

9、0;下面示例,Sum 接收了對表中數值型字段的引用并使用 _RetFloat 返回了該字段值的和:復制代碼#include <Pro_ext.h>Sum(ParamBlk *parm)/ 聲明變量double tot = 0, rec_cnt;int i = 0, workarea = -1; / -1 是當前工作區(qū)Value val;/ GO TOP 到表頭_DBRewind(workarea);/ Get RECCOUNT( ) 獲取記錄數rec_cnt = _DBRecCount(workarea);/ 循環(huán)遍歷表for(i = 0; i < rec_cnt; i+)

10、/將字段值放置到 Value 結構中 _Load(&parm->p0.loc, &val); / 將該值添加到累計總數 tot += val.ev_real; / SKIP 1 在工作區(qū)中下跳一條記錄 _DBSkip(workarea, 1); / 將總數值返回到 Visual FoxPro_RetFloat(tot, 10, 4); / Sum 函數獲得一個引用參數FoxInfo myFoxInfo = "SUM", Sum, 1,"R" ;FoxTable _FoxTable = (FoxTable *) 0, sizeof(m

11、yFoxInfo)/sizeof(FoxInfo), myFoxInfo;假設當前打開的表中有名為 amount 的數值型字段,Visual FoxPro 程序中的下列代碼行可以調用該函數:復制代碼? SUM(amount)三、外部庫的參數當 Visual FoxPro 調用 ActiveX 控件、COM 對象或 Visual FoxPro 動態(tài)連接庫(FLL)時,可以傳遞參數。例如,ActiveX 控件可能在調用它其中一個方法時接收參數。同樣,Visual FoxPro 程序也可能調用 FLL 庫中的函數并將參數傳遞給它。Visual FoxPro 可以通過值或通過引用將參數傳遞給外部庫。在

12、默認情況下,遵循 SET UDFPARMS 命令的設置。然而,其他變量,如數組或字段,以及表達式通過值來傳遞。有關如何改變傳遞參數默認方法的信息,請參見 將數據傳遞給參數。 由于 ActiveX 控件和 COM 對象是標準的 Windows 程序,不需要特別的機制將參數從 Visual FoxPro 傳遞到 ActiveX 控件或 COM 對象??梢韵髲娜魏?C 或 C+ 程序接收參數那樣編寫庫代碼。然而,FLL 庫中的函數使用 FoxInfo 結構從 Visual FoxPro 中獲取數據。FoxInfo 結構列示了庫函數以及它們所期待的參數數量和類型。例如,下列 FoxInfo 結構屬于帶

13、有一個內部被稱為 dates ,接收一個字符型參數的函數的庫:復制代碼FoxInfo myFoxInfo = "DATES", (FPFI) dates, 1, "C" ;在外部庫中定義的函數實際上只接收了一個參數,也就是到參數塊的指針。該參數塊,在 ParamBlk 結構中定義,存儲了所有有關從 Visual FoxPro 函數調用傳遞來的參數信息。下面的代碼舉例說明了函數聲明應當遵循的格式:復制代碼void function_name(ParamBlk *parm)例如,dates 的函數定義是:復制代碼void dates(ParamBlk *pa

14、rm)ParamBlk 結構由表示參數數量的整數組成,后面直接跟隨參數聯合的數組。該結構定義被包含在 Pro_ext.h 中:復制代碼/* 庫函數的參數列表。 */typedef struct short int pCount; /* 傳遞的參數數量 */ Parameter p1; /* pCount 參數 */ ParamBlk;包含在 ParamBlk 結構中的 Parameter typedef 是 Value 結構和 Locator 結構的組合。通過值的調用由 Value 結構處理;通過引用的調用由 Locator 結構處理。當從 Visual FoxPro 中調用函數時,可以使用這

15、些結構接收傳遞到函數的參數。下列從 Pro_ext.h 文件中提取出來的信息展示了 Parameter 類型的定義:復制代碼/* 到庫函數的參數。 */typedef union Value val; Locator loc; Parameter;Value 結構定義如果通過值將參數傳遞到函數,則使用 Value 結構來接收它。下面的 Value 結構定義是從 Pro_ext.h 文件中提取出來的:復制代碼/ An expression's value.Typedef struct char ev_type; char ev_padding; short ev_width; unsig

16、ned ev_length; long ev_long; double ev_real; CCY ev_currency; MHANDLE ev_handle; ULONG ev_object; Value;Value 結構域下表是對于不同數據類型,可以在 Value 結構中傳遞和接收值的指導。只有為數據類型列示的結構域才可以用于該數據類型。不同數據類型的 Value 結構內容數據類型結構域值字符型ev_type'C' ev_length串長度 ev_handle到串的 MHANDLE數值型ev_type'N' ev_width顯示

17、寬度 ev_length小數位 ev_real雙精度整型(Integer)ev_type'I' ev_width顯示寬度 ev_long長整型(Long integer)日期型ev_type'D' ev_real日期1日期時間(Date Time)ev_type'T' ev_real日期 + (秒/86400.0)貨幣型ev_type'Y' ev_width顯示寬度 ev_currency貨幣值2邏輯型ev_type'L' e

18、v_length0 或 1備注型ev_type'M' ev_wdithFCHAN ev_long備注字段長度 ev_real備注字段偏移量通用(General)ev_type'G' ev_wdithFCHAN ev_long通用型字段長度 ev_real通用型字段偏移量對象(Object)ev_type'O' ev_object對象標識符Nullev_type'0' (零) ev_long數據類型1. 日期被表現為使用 ACM 算法集合中 199 算法

19、(Algorithm 199 from Collected Algorithms of the ACM)計算出來的雙精度浮點儒略(Julian)日數字。 2. 貨幣值是長整型,在最后四個阿拉伯數字之前帶有隱含的小數點。注意:ev_length 是串長度的唯一真實的指示器。由于串可以包含內置的 null 字符,因此串不能以 null 作為終止符。 Locator 結構定義使用 Locator 結構操作通過引用傳遞的參數。下面的 Locator 結構定義是從 Pro_ext.h 文件提取的:復制代碼typedef struct char l_type; short l_where, /*

20、 數據庫編號或內存變量的 -1 */ l_NTI, /* 變量名表的偏移量 */ l_offset, /* 數據庫中的索引 */ l_subs, /* # 指定的下標 0 <= x <= 2 */ l_sub1, l_sub2; /* 下標整型值 */ Locator;Locator 結構域下表是 Locator 結構中域的指導。Locator 域域的用途l_type'R'l_where包含該域的表編號,或變量的 1。l_NTI名稱表索引。Visual FoxPro 內部使用。l_offset表中的域編號。Visual FoxPro 內部使用。l_subs只用于變量

21、,下標的編號(0 2)。l_sub1只用于變量,如果 l_subs 不是 0,則為第一個下標。l_sub2只用于變量,如果 l_subs 是 2,則為第二個下標。注意:檢查 ev_type 中的參數類型以幫助確定從 Value structure 接收的是哪幾個域是良好的設計習慣。 訪問 FLL 庫中參數示例下面示例使用 _StrCpy( ) 將字符型類型返回給 Visual FoxPro,那是其兩個字符型參數的串聯。注意,盡管每個參數 Value 結構的句柄被用于操作內存以完成該串聯,但改變內存的分配不影響通過值傳遞的 Visual FoxPro 參數。復制代碼#include &

22、lt;Pro_ext.h>Example(ParamBlk *parm)/ 通過使用 #define 快捷方式使得 paramBlk 結構易于管理#define p0 (parm->p0.val)#define p1 (parm->p1.val)/ 確保有足夠的內存if (!_SetHandSize(p0.ev_handle, p0.ev_length + p1.ev_length) _Error(182); / "內存不足"/ 鎖定句柄_HLock(p0.ev_handle);_HLock(p1.ev_handle);/ 將句柄轉換為指針并確保串是由 n

23、ull 作終止符(char *)_HandToPtr(p0.ev_handle)p0.ev_length = '0'(char *)_HandToPtr(p1.ev_handle)p1.ev_length = '0'/ 用 API 函數 _StrCpy 連接串_StrCpy(char *)_HandToPtr(p0.ev_handle) + p0.ev_length,_HandToPtr(p1.ev_handle);/ 將已連接的串返回給 Visual FoxPro_RetChar(_HandToPtr(p0.ev_handle);/ 解除句柄鎖定_HUnLoc

24、k(p0.ev_handle);_HUnLock(p1.ev_handle);FoxInfo myFoxInfo = "STRCAT", Example, 2, "CC",;FoxTable _FoxTable = (FoxTable *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo;四、創(chuàng)建 Visual FoxPro 動態(tài)鏈接庫Visual FoxPro 動態(tài)鏈接庫本質上是一個包含調用 Visual FoxPro API 的 DLL。在開發(fā)環(huán)境中,當你想添加調用的 Visual FoxPro 函數時

25、,你可以創(chuàng)建基本的 DLL 結構。下列章節(jié)講述了在 C 和 C+ 中創(chuàng)建 FLL 模板的模板示例。設立庫模板每個 Visual FoxPro FLL 庫有相同的基本結構。你可以使用一個關于結構的模板,所以僅需添加關于特殊庫例程的代碼。在一個 Visual FoxPro 庫模板中有五個要素:#include 語句。函數定義。該函數定義有一個空的返回值和傳遞 ParamBlk *parm 的參數。有關更多的關于ParamBlk 參數的信息請參見在外部庫中的參數。函數代碼。FoxInfo 結構。在 FLL 中的函數通過 FoxInfo 結構與 Visual FoxPro 結合。Visual FoxP

26、ro 使用 FoxInfo 確定該函數名和數字及參數的類型。FoxTable 結構。FoxTable 結構是一個明了 FoxInfo 結構的連接列表。有關 FoxInfo 和 FoxTable 結構定義的更多信息,請參見  Pro_ext.h 文件。還需要下列文件:Pro_ext.h 頭文件。你可以打印該文件來查看函數的聲明、typedefs 和在 Visual FoxPro API 中使用的結構。Winapims.lib 文件這兩個文件可在 Microsoft Visual FoxPro .SamplesAPI 目錄中找到。模板示例對于 C 例程,可以使用下列模板:復制代碼#inc

27、lude <Pro_ext.h>void Internal_Name(ParamBlk *parm)/ Function code goes here.FoxInfo myFoxInfo = "FUNC_NAME", (FPFI) Internal_Name, 0, "",;FoxTable _FoxTable = (FoxTable *)0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo;對于 C+ 例程,在下列模板中需要聲明 FoxTable 作為外部結構:復制代碼#include <Pr

28、o_ext.h>void Internal_Name(ParamBlk *parm)/ Function code goes here. FoxInfo myFoxInfo = "FUNC_NAME", (FPFI) Internal_Name, 0, "", ;extern "C" FoxTable _FoxTable = (FoxTable *)0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo ;五、訪問 Visual FoxPro 的變量和字段可以在 ActiveX 控件或 F

29、LL 函數中訪問 Visual FoxPro 的變量和字段值,讀取它們或設置它們。此外,還可以創(chuàng)建能從 Visual FoxPro 中訪問的新變量。變量和字段可在 Visual FoxPro 中的命名表中得到,那是包含所有當前已定義變量和字段名的數組。可以使用命名表索引(NTI)訪問數組中的單個元素。一個特定的 API 函數 _NameTableIndex( ) 依據所提供的名稱返回現有變量或字段的索引。確定了給定變量的 NTI 之后,可以使用 _Load( ) API 函數讀取它或使用 _Store( ) API 函數設置它。要創(chuàng)建新變量,可以調用 API 函數 _NewVar( )。 要訪

30、問 Visual FoxPro 的變量和字段,可以使用 Pro_ext.h 中定義的 Value 和 Locator 結構。如果正在創(chuàng)建 FLL 庫,可以使用被用于訪問傳遞到函數參數的同樣技術。有關 Value 和 Locator 結構的詳細資料,請參見 外部庫的參數。 下面示例舉例說明了如何可以使用 Value 和 Locator 結構在 ActiveX 控件中訪問 Visual FoxPro 變量。復制代碼long CFoxtlibCtrl:TLGetTypeAttr(long pTypeInfo, LPCTSTR szArrName) int nResult = 1; TYPEATTR

31、*lpTypeAttr; Locator loc; Value val; OLECHAR szGuid128; char *szBuff;_try if (_FindVar(_NameTableIndex( char *)szArrName),-1,&loc) (ITypeInfo *)pTypeInfo)->GetTypeAttr(&lpTypeAttr); if (_ALen(loc.l_NTI, AL_ELEMENTS) < 16) _Error(631); /Array argument not of proper size. /1 = Guid Strin

32、gFromGUID2(lpTypeAttr->guid, (LPOLESTR )&szGuid,sizeof(szGuid); OLEOleToAnsiString(szGuid,&szBuff); val.ev_type = 'C' val.ev_length = strlen(szBuff); val.ev_handle = _AllocHand(val.ev_length); _HLock(val.ev_handle); _MemMove(char *) _HandToPtr( val.ev_handle ), szBuff, val.ev_leng

33、th); OLEFreeString(void *)&szBuff); _HUnLock(val.ev_handle); loc.l_sub1 = 1; _Store(&loc,&val); _FreeHand(val.ev_handle); /2 = LCID loc.l_sub1 = 2; val.ev_type = 'I' val.ev_long = lpTypeAttr->lcid; _Store(&loc,&val); / code for values 3 - 16 here (ITypeInfo *)pTypeInfo

34、) -> ReleaseTypeAttr(lpTypeAttr); _except (EXCEPTION_EXECUTE_HANDLER) nResult = 0; return nResult;六、用 Visual FoxPro API 管理內存Visual FoxPro API 提供了對 Visual FoxPro 動態(tài)內存管理器的直接訪問。請求內存分配的 API 例程返回識別內存的內存句柄。Visual FoxPro 使用句柄而不是指針分段加載結構,以便可以更有效地管理內存。內存句柄實際上是指針數組中的索引。該指針指向 Visual FoxPro 掌握的內存塊。API 中幾乎所有對

35、內存的引用都是通過幾柄而不是更傳統(tǒng)的 C 指針來實現。理解堆棧所創(chuàng)建的控件或庫并不具有自己的內存堆棧。相反,它使用調用程序的內存堆棧,或這里的 Visual FoxPro 堆棧。然而,無法控制 Visual FoxPro 堆棧的大小或影響 ActiveX 控件或 FLL 可用堆??臻g的總數。在正常情況下,這個差別并不重要。Visual FoxPro 堆棧通常大到足以支撐可能要在控件或庫中指派的自動變量。如果用完了堆??臻g,始終可以動態(tài)地在堆棧上指派額外的內存。使用句柄的規(guī)則下列規(guī)則適用于內存句柄的指派和釋放:用戶必須釋放他們指派的所有句柄,包括通過 _Load() 之類函數指派的句柄。_Loa

36、d() 只在所加載的變量是字符串(即,ev_type = 'C')時才創(chuàng)建句柄。所有其他數據類型在它自己的 Value 結構中存儲其值,而字符串的加載將 MHANDLE 放置到 Value 結構的 ev_handle 中。在 FLL 庫中,Visual FoxPro 負責釋放所有用 _RetVal( ) 返回的句柄。即使用戶指派了它們,也不能釋放這些句柄。用戶不能釋放 ParamBlk 中傳遞的句柄。警告:當編寫調用函數的外部例程序時,確定遵從了所有規(guī)則并檢查了返回結果。迷失的指針和句柄引用可以損害 Visual FoxPro 內部數據結構,導致直接的異常終止或遺留的問題,可以

37、導致數據丟失。 七、如何管理內存可以使用 Visual FoxPro API 分配和管理內存。注意:所描述的技術適用于 ActiveX 控件和 FLL 庫。 要分配和使用內存用 _AllocHand( ) 分配句柄。 用 _HLock( ) 鎖定句柄。 用 _HandToPtr( ) 將句柄轉換為指針。 通過使用指針來引用內存。用 _HUnLock( ) 解鎖句柄。 注意:要避免損壞備注文件,在調用 _AllocMemo( ) 之前不要寫備注文件。為了確定已分配內存的地址,API 例程必須調用 _HandToPtr( ) 例程將句柄轉換為指針。即使 Visual FoxPr

38、o 內存管理器需要重新組織內存以便為后來的內存請求獲取更加連續(xù)的內存,該句柄也保持不變。同時還提供了增加、減少、釋放和鎖定內存分配的例程。在創(chuàng)建外部例程時,應盡量減少內存的使用。如果創(chuàng)建了動態(tài)分配內存的外部例程,盡可能少地使用內存。對于長時間鎖定大量內存分配時要特別小心。記住在不再需要鎖定時用 _HUnLock( ) 解鎖內存句柄,因為鎖定內存句柄會對 Visual FoxPro 的性能產生不利影響。警告:過多地使用動態(tài)內存會侵占 Visual FoxPro 緩沖、窗口、菜單等的內存,并導致性能降低,因為滿足 API 需求的內存是由 Visual FoxPro 內存管理器進行管理的。分配大量句

39、柄并保留它們可以導致 Visual FoxPro 用完內存并異常終止。Visual FoxPro 環(huán)境不具備內存保護。外部 API 例程不能完全提供標準 Visual FoxPro 程序中固有的檢驗。如果破壞了內存,將會接受到“跨越句柄(Transgressed handle)”、“內部一致性錯誤(Internal consistency error)” 和 “壓縮過程中跨越節(jié)點(Transgressed node during compaction)” 之類的信息。 下面 FLL 庫中的函數舉例說明了內存的分配。該示例使用 _RetDateStr( ) 返回了一個 Visual F

40、oxPro 日期型 類型(假定 Character 參數是正確的日期):復制代碼#include <Pro_ext.h>void dates(ParamBlk *parm) MHANDLE mh; char *instring; if (mh = _AllocHand(parm->p0.val.ev_length + 1) = 0) _Error(182); / "內存不足" _HLock(parm->p0.val.ev_handle); instring = _HandToPtr(parm->p0.val.ev_handle); instringparm->p0.val.ev_length = '0' _RetDateStr(instring); _HUnLock(parm->p0.val.ev_handle);FoxInfo myFoxInfo = "DATES", (FPFI) dates, 1, "C"FoxTable _FoxTable = (FoxTable *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo;八、FoxInfo 結構FoxInfo 結構被用于在 Visual FoxPr

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論