草木皆兵是什么意思| 沈阳是什么省| 什么是正太| 尿检隐血十一什么意思| 戾什么意思| 什么是led灯| 肺部散在小结节是什么意思| 死精是什么原因造成的| 梅开二度是什么意思| 山楂泡水有什么好处| 保护声带喝什么| 鲁迅是著名的什么家| 血瘀是什么意思| 腹胀是什么感觉| 唇钉是干什么用的| 蚂蚱吃什么食物| 晚上难入睡是什么原因| 凌厉是什么意思| 血压低吃什么食物| 强迫症吃什么药效果好| 往来账是什么意思| 痔疮是什么原因| 这是什么植物| 地西泮又叫什么| 赵构为什么杀岳飞| 亲子鉴定需要什么材料| 699是什么意思| 猫屎为什么那么臭| 维生素b是什么| 绿茶什么意思| 鬼最怕什么东西| 王一博是什么星座| 乌黑乌黑的什么| 空孕囊是什么原因造成的| 贾珍和贾政是什么关系| 脾囊肿是什么原因引起的| 养肝护肝吃什么药效果最好| 松香有毒吗对人体有什么危害| 八成是什么意思| 人为什么会胡思乱想| 湿气重是什么意思| 怀孕几天后有什么反应| 血脂稠喝什么茶效果好| 手抖是什么病| 痛风吃什么药最有效| 路亚什么意思| 大腿根疼是什么原因| 半夜尿多是什么原因| 什么病不能吃核桃| 竖心旁的字和什么有关| 什么是绝对值| 妲是什么意思| 合肥属于什么省| 幼犬可以吃什么| 额头上长痘痘是什么原因引起的| 突然间头晕是什么原因| 手心发烧是什么原因| 股长是什么级别| 为什么叫八路军| 猫贫血吃什么补血最快| 农历12月26日是什么星座| 鸡拉稀吃什么药| 重庆什么时候解放的| 有痰吃什么药| 阴囊湿疹用什么药| 今夕何夕是什么意思| 酒精过敏什么症状| 非洲人吃什么主食| 副局级是什么级别| 女人脾虚吃什么最好| 什么动物没有耳朵| 述求是什么意思| 塔罗牌是什么| 糖代谢增高是什么意思| 什么是品质| 鱼生是什么鱼| 什么时候取环最合适| 金渐层是什么品种| 什么叫痉挛| 蜻蜓点水是什么行为| 尺码m是什么意思| 6月12日是什么日子| 气血不足什么症状| 刚做了人流适合吃什么好| 夏天吃什么水果好| 什么样的羽毛| 做彩超为什么要憋尿| 急性肠胃炎吃什么药好| sod是什么意思| 子宫薄是什么原因造成的| 消炎药不能和什么一起吃| 什么狗不咬人| 上镜是什么意思| 甄是什么意思| 女人缺铁性贫血吃什么好| 婀娜多姿是什么意思| 乳腺点状钙化是什么意思| 舌头鱼又叫什么鱼| 枸杞加什么泡水喝壮阳| 激素6项检查是些什么| 为什么会放屁| 金贵肾气丸治什么病| 健康证都查什么| 柳丁是什么水果| 婆媳关系为什么难相处| 野趣是什么意思| hm什么牌子| 耳鸣挂什么科| 心脏主要由什么组织构成| 224是什么星座| 代孕什么意思| 什么是蜘蛛痣图片| 人设崩塌是什么意思| 牙齿发白是什么原因| 字母圈是什么| 梦见别人盖房子是什么预兆| 胃酸恶心想吐什么原因| 负面影响是什么意思| 什么是高血脂| 去湿气吃什么中药| 跖疣是什么东西| 木耳属于什么类| 18k金是什么| 天上人间是什么意思| 2004属什么| 丝瓜吃了有什么好处| 什么牌子的床垫好| 颜值担当是什么意思| 拔罐出水是什么原因| 为什么总是睡不着| 锦纶是什么面料优缺点| 2050年是什么年| 六三年属什么生肖| 女人梦见鬼是什么征兆| 间断是什么意思| 传说中的狮身人面像叫什么名字| 胆汁酸高是什么意思| 桑螵蛸是什么| 有胃火口臭怎么办吃什么药| 本科是什么学历| 什么叫总胆固醇| 家财万贯是什么动物| 81是什么节日| 肉蒲团是什么| 慢性非萎缩性胃炎吃什么药效果好| 谷氨酰转肽酶是指什么| 敞开心扉是什么意思| 戈谢病是什么病| 糖类抗原50是什么指标| 儿童胃肠型感冒吃什么药| 猪下水是什么| 华人是什么意思| 孕早期头晕是什么原因| 为什么会感染幽门螺旋杆菌| 甲状旁腺激素高吃什么药| 白咖啡是什么| 成什么上什么| 胃低分化腺癌是什么意思| 麦冬长什么样| 黄连素又叫什么名字| 什么是闺蜜| 年纪是什么意思| 密度增高影是什么意思| 物理意义是什么意思| 红花泡水喝有什么功效和作用| 11.22是什么星座| 舒肝健胃丸治什么病| 煲汤放什么药材补气血| 格林是什么意思| 羊经后半边读什么| 平行宇宙是什么意思| 为什么会有阴道炎| 乙肝15阳性是什么意思| 中国民间为什么要吃腊八粥| 手老是出汗是什么原因| 牙齿突然酸痛什么原因| 鹰的天敌是什么动物| 晕车是什么原因引起的| 夏至节气吃什么| 憋尿会造成什么后果| 什么狗最贵| 海粉是什么| 手指甲出现双层是什么原因| 双子座女和什么星座最配| 一什么千什么| 长个子需要补充什么| 耳鸣是什么原因造成的| 韩红和张一山什么关系| 迷糊是什么原因| 每天坚持做俯卧撑有什么好处| 受惊吓吃什么药| 柠檬水喝多了有什么坏处| 粉瘤挂什么科| 白配什么颜色好看| 医院门特是什么意思| 阴毛变白是什么原因| ct和b超有什么区别| 男生下面长什么样| 小气道病变是什么意思| 为什么头老是晕晕的| 外耳道炎用什么药| 什么血型容易被蚊子咬| 倾国倾城是什么生肖| 生气发抖是什么原因| 下呼吸道是指什么部位| 2025年是什么命| 什么水果热量低| 焚书坑儒什么意思| 甲硝唑吃多了有什么危害| 药物流产后吃什么好| 火加同念什么| 梦见自己被火烧是什么意思| 什么样的油菜花| 什么是新鲜感| 补充公积金是什么意思| 雄字五行属什么| 绝交是什么意思| 8月30号是什么星座| 日什么月什么的成语| 静脉曲张有什么危害吗| 智商高是什么意思| 绞股蓝和什么搭配喝减肥| 吃什么东西越吃越饿| 乳腺瘤不能吃什么| 惊风是什么意思| 腰椎疼挂什么科| 初潮是什么| 皮肤出现红点是什么原因| 子时是什么时间| 早日康复是什么意思| 节令是什么意思| 什么是切线| 梦见自己大笑是什么意思| 皮赘是什么原因引起的| 花胶有什么功效| 巨蟹座与什么星座最配| 肾看什么科| 悦字属于五行属什么| coach是什么牌子的包| 前白蛋白高是什么意思| 雪对什么| 蚧壳虫用什么药| 梦见自己的手镯断了什么意思| 禁欲什么意思| 04年属猴的是什么命| 女性吃金蝉有什么好处| 你好是什么意思| 1978年属什么的| 报销是什么意思| 老三篇是什么意思| 红薯用什么繁殖| 牛肉不能和什么水果一起吃| 牙齿里面疼是什么原因| 有机蔬菜是什么意思| 打哈哈是什么意思| 鹅蛋炒香菜治什么病| 哥伦比亚牌子什么档次| 算筹指的是什么| 渚是什么意思| 右手中指痛什么预兆| 旦上面加一横是什么字| 多吃鱼有什么好处| 米酒不甜是什么原因| 印第安人是什么人种| 百度Vai al contenuto

涿州今年有机肥施用面积将达到5700亩

Da Wikipedia, l'enciclopedia libera.
百度   祝他们好运。

In informatica il Component Object Model (noto con l'acronimo COM, inglese per Modello a oggetti per componenti) è un'interfaccia per componenti software introdotta da Microsoft nel 1993. COM permette la comunicazione tra processi e creazione dinamica di oggetti con qualsiasi linguaggio di programmazione che supporta questa tecnologia.[1] Il termine COM è spesso usato nel mondo dello sviluppo software con più significati: OLE, OLE Automation, ActiveX, COM+ e DCOM. Nonostante l'introduzione di COM risalga al 1993, Microsoft ha iniziato ad utilizzare con enfasi questo nome solamente nel 1997.

Sebbene sia stato portato anche su altre piattaforme, COM è utilizzato principalmente con Microsoft Windows. Si prevede una progressiva sostituzione almeno parziale di COM da parte del framework Microsoft .NET.

Anthony Williams, una delle principali menti coinvolte nella creazione dell'architettura COM, distribuì un paio di documenti Microsoft interni che trattavano il concetto di componenti software; "Object architecture: dealing with the unknown - or - Type safety in a dynamically extensible class" ("Architettura di un oggetto: trattare l'ignoto - o - Sicurezza dei tipi in una classe dinamicamente estensibile") nel 1988 e "On inheritance: what it means and how to use it" ("Sull'ereditarietà: cosa significa e come si usa") nel 1990. Questi gettarono le basi per molte, se non tutte, delle idee dietro ai fondamenti di COM.

Da molte di quelle idee nacque il primo framework ad oggetti di Microsoft, OLE (acronimo dell'inglese Object linking and embedding, sta per Collegamento ed incorporazione di oggetti). OLE fu costruito partendo dal DDE e progettato con un occhio di riguardo per i documenti compositi; fu introdotto per la prima volta con Word per Windows ed Excel nel 1991, e fu successivamente incluso in Windows, a partire dalla versione 3.1 del 1992. Un esempio di documento composito può essere un foglio di Excel in un documento di Word; quando il foglio di calcolo viene modificato, i cambiamenti compaiono automaticamente all'interno del documento di Word.

Nel 1991 Microsoft introdusse la tecnologia VBX (acronimo di Visual Basic extension, Estensione di Visual Basic) con Visual Basic 1.0.

Nel 1993 Microsoft distribuì OLE 2, avente COM come modello a oggetti sottostante. Mentre OLE 1 era focalizzata sui documenti compositi, COM ed OLE 2 avevano un indirizzo più generico. Nel 1994 furono introdotti i controlli OLE (OCX, OLE Control eXtension, cioè Estensione controllo OLE) quali naturali successori dei controlli VBX; al tempo stesso, Microsoft annunciò che OLE 2 sarebbe stato chiamato semplicemente "OLE", e che questo non sarebbe più stato un acronimo, ma un vero e proprio nome con cui la compagnia avrebbe indicato le proprie tecnologie ad oggetti.

Successivamente, nell'inizio del 1996, Microsoft cambiò nome ad alcune parti di OLE relative ad Internet in ActiveX, iniziando così quel processo che l'ha portata a rinominare negli anni tutte le tecnologie OLE in ActiveX, con la sola eccezione della tecnologia di documenti compositi impiegata in Microsoft Office. Più tardi, in quell'anno, Microsoft distribuì DCOM (acronimo di Distributed component object model, inglese per Modello ad oggetti per componenti distribuiti) quale risposta a CORBA.

Struttura e funzionamento di COM

[modifica | modifica wikitesto]

Lo scopo del Component Object Model è quello di permettere la creazione di componenti software binari: sebbene sia stato creato avendo in mente il linguaggio C++, COM è neutrale rispetto al linguaggio di programmazione, cioè si può usare qualunque linguaggio di programmazione per usare componenti COM a runtime. Questa neutralità è ottenuta specificando i formati dei dati e delle chiamate a funzioni con il linguaggio IDL, del tutto indipendente. Concettualmente quindi, è un passo in avanti ulteriore rispetto alle librerie a collegamento dinamiche (DLL). Ogni oggetto COM deve essere unico all'interno del sistema, e viene usato attraverso interfacce software anche loro globalmente uniche. Per assicurare l'unicità, il programmatore che crea un nuovo oggetto COM crea un GUID per lui (un numero identificativo di 128 bit, generato casualmente e che è, quasi sicuramente, diverso da ogni altro GUID nel sistema) e un GUID per ciascuna delle interfacce che l'oggetto implementa; questi GUID vengono detti CLSID (class ID) se si riferiscono a un oggetto COM e IID (interface ID) se si riferiscono a un'interfaccia. Affinché sia possibile usare un oggetto COM, questo deve essere registrato in Windows nel registro di sistema, vale a dire viene creata una voce nel registro che associa il CLSID del componente al file su disco che lo implementa fisicamente, e a eventuali informazioni di configurazione. Quando un programma richiede un dato componente COM, fa riferimento al CLSID corrispondente: Windows si occuperà di trovare il file su disco (DLL o EXE) e caricare il codice necessario. Fatto questo, il programma chiederà al componente appena creato l'accesso a una delle sue interfacce, usando l'IID di quella che gli serve.

Le interfacce

[modifica | modifica wikitesto]

Una interfaccia COM è una collezione di funzioni: vale a dire, è una classe virtuale pura, e nella programmazione ad oggetti viene in genere modellata così. Tutte le componenti COM devono come minimo implementare l'interfaccia standard IUnknown. Infatti, tutte le interfacce COM sono derivate dall'interfaccia IUnknown. Essa consiste in tre metodi: AddRef() e Release(), che implementano il conteggio dei riferimenti (reference counting) e controllano il ciclo di vita delle interfacce; e QueryInterface(), che specificando un IID permette al chiamante di ottenere riferimenti alle varie interfacce fornite dal componente.

Materialmente, un'interfaccia consiste in un puntatore a una tabella di funzioni virtuali che contiene una lista di puntatori alle funzioni che implementano i metodi dichiarati nell'interfaccia, nello stesso ordine con cui sono dichiarati. Questa tecnica di passare liste di puntatori a funzione è l'evoluzione diretta di quella usata in OLE 1.0 per comunicare con le sue librerie di sistema.

COM specifica molte altre interfacce standard usate per la comunicazione tra componenti. Per esempio, una di queste interfacce è IStream, che è fornita dalle componenti che hanno semantica di flussi di dati (es. la componente FileStream usata per leggere e scrivere i file). Essa fornisce i metodi Read e Write per effettuare letture e scritture di flussi. Un'altra interfaccia standard è IOleObject, fornita dai componenti che prevedono di essere collegati o incapsulati dentro un contenitore. IOleObject contiene metodi che permettono ai chiamanti di determinare il rettangolo perimetrale della componente, determinare se la componente supporta operazioni come Apri, Salva, e così via.

Come già detto, COM venne sviluppato avendo in mente il C++, quindi fa largo uso di puntatori. Questo rendeva impossibile l'uso di oggetti COM con linguaggi che non ne hanno, come il Visual Basic, Java e tutti i linguaggi di scripting; la OLE Automation, fra le altre cose, pose rimedio a questa situazione. Le interfacce a puntatori vennero denominate custom interfaces e affiancate da nuove interfacce analoghe ma prive di puntatori, basate su array e collezioni di oggetti, denominate automation interfaces; nella versione Automation, l'interfaccia IUnknown viene sostituita da IDispatch. Uno stesso componente può implementare le stesse interfacce in entrambe le versioni; tuttavia la versione Custom è obbligatoria, mentre la Automation è solo facoltativa.

Conteggio dei riferimenti

[modifica | modifica wikitesto]

Il conteggio dei riferimenti (reference counting) viene usato dai componenti COM per sapere quando possono terminare e scaricarsi dalla RAM. Un programma client che utilizza il componente non può procedere con la sua eliminazione quando ha terminato di usarlo, perché potrebbe essere ancora in uso da altri programmi client (del resto in ambiente COM è prevista la possibilità che un client, una volta terminata l'interazione con un componente, passi il puntatore all'interfaccia dello stesso componente ad un altro client). Perciò l'eliminazione di un componente viene gestita da lui stesso attraverso il reference counting; questa tecnica prevede che l'oggetto COM (ovvero il componente), quando passa il puntatore da una sua interfaccia ad un programma client (il che avviene in seguito alla richiesta da parte del client di poter utilizzare quella particolare interfaccia), incrementa di 1 il "reference count". Quando il client termina di utilizzare l'oggetto COM invoca il metodo IUnknown::Release() che decrementa di 1 il "reference count". Quando un client riceve il puntatore ad una interfaccia da un altro client invoca sull'oggetto COM il metodo IUnknown::AddRef() che incrementa di 1 lo stesso "reference count". L'oggetto COM si "auto-distruggerà" quando "reference count" è uguale a 0.

Ereditarietà, contenimento e aggregazione

[modifica | modifica wikitesto]

Lo standard prevede un meccanismo di ereditarietà singola che permette a un componente di estendere le funzioni di un altro: ogni interfaccia può ereditare i metodi di una (e solo una) interfaccia preesistente, ma non di modificare o di sostituire i metodi ereditati dall'interfaccia "padre". Più in generale è prassi abbastanza comune per gli oggetti COM di una certa complessità fare uso di altri oggetti COM al loro interno; si parla di contenimento di un oggetto COM se il primo si avvale delle sue interfacce senza renderle disponibili al di fuori di esso, e di aggregazione se invece lo fa.

Windows XP ha introdotto una nuova modalità di registrazione locale dei componenti COM, chiamata Registration-Free COM o RegFree COM per brevità. Con questa tecnica le applicazioni non devono più registrare metadati di attivazione e CLSID nel registro di Windows, ma possono specificarli nel loro manifest; questo può essere un file XML che risiede nella directory dell'applicazione stessa oppure essere contenuto nell'header del suo file eseguibile, come sezione in formato binario. Quando Windows caricherà l'applicazione e questa farà riferimento ai suoi oggetti COM, la class factory (l'ente che materialmente crea gli oggetti COM) consulterà il manifest dell'applicazione per cercare i GUID specificati e i metadati associati e caricherà quelli forniti con l'applicazione; solo se il manifest non contiene i GUID richiesti consulterà il registro di Windows e (se ne trova installati) creerà gli equivalenti oggetti COM di sistema. Il limite di questa tecnologia è che non può essere usata con componenti COM che devono essere visibili in tutto il sistema, quindi non si può usare per server COM OutOfProcess o per implementare parti di sistema operativo (MDAC, MSXML, DirectX o Internet Explorer).

Tecnologie correlate

[modifica | modifica wikitesto]

COM è stata la principale piattaforma di sviluppo software per Windows e, in quanto tale, ha influenzato lo sviluppo di una serie di tecnologie a supporto.

Con Windows 2000, furono introdotte un numero significativo di estensioni COM chiamate COM+. Nello stesso periodo Microsoft de-enfatizzò DCOM come entità separata.

Lo stesso argomento in dettaglio: Distributed Component Object Model.
Lo stesso argomento in dettaglio: Microsoft .NET.

La piattaforma COM è stata ampiamente sorpassata da Microsoft .NET, ed il marketing di Microsoft è del tutto incentrato su .NET; in un certo senso, COM adesso è addirittura deprecato a favore di .NET. Nonostante ciò, COM rimane una tecnologia importante per via della sua massiccia base software – per esempio, l'SDK DirectX è basato su COM; inoltre, un componente COM è teoricamente sempre più prestante di un corrispondente componente gestito .NET[senza fonte]. Al momento della redazione di questa voce, Microsoft non ha annunciato di aver intenzione di ritirare né interrompere il supporto a COM.

Alcuni servizi che fornisce COM+, come le transazioni e code di componenti, sono ancora importanti per le applicazioni enterprise di .NET.

C'è un limite alla retrocompatibilità. Un oggetto COM può essere usato in .NET implementando un runtime callable wrapper (RCW).

Sicurezza su Internet

[modifica | modifica wikitesto]

Poiché le componenti COM e ActiveX sono eseguite come codice nativo sulla macchina dell'utente, ci sono poche restrizioni su ciò che il loro codice può fare. Molti di questi problemi sono stati affrontati dalla relativa deprecazione di COM nelle piattaforme sviluppate da allora, come la piattaforma Java, e in seguito anche la piattaforma .NET.

L'idea della Microsoft di incapsulare il contenuto attivo nelle pagine web sotto forma di componenti COM/ActiveX (anziché, ad esempio, applet Java) ha creato una serie di problemi nel browser Internet Explorer, che ha portato a un'esplosione di infezioni da virus informatici, trojan e spyware. Questi attacchi di malware devono soprattutto a ActiveX la loro attivazione e propagazione agli altri computer. Microsoft ha riconosciuto il problema di ActiveX già nel 1996, quando Charles Fitzgerald, direttore della squadra Java della Microsoft, ha detto "Se si vuole la sicurezza nella Rete, si scolleghi il computer. (...) Non abbiamo mai sostenuto che ActiveX sia intrinsecamente sicuro."

Dal momento che COM è piuttosto complesso da implementare, i programmatori corrono il rischio di essere distratti da altre attività laterali.

Inizializzazione dell'ambiente

[modifica | modifica wikitesto]

Per ogni thread che necessita delle funzionalità di COM, il programmatore deve aggiungere chiamate esplicite alle funzioni CoInitialize[Ex] e CoUninitialize; inoltre, il codice che utilizza gli appunti o il drag & drop OLE deve chiamare OleInitialize e OleUninitialize. Dato che alcuni thread nel sistema possono essere stati creati da librerie che non usano COM, il programmatore deve prestare attenzione nell'usare qualsiasi funzione di COM in un thread che non è stato creato all'interno del programma stesso.

Smistamento dei messaggi

[modifica | modifica wikitesto]

Quando un Single-Threaded Apartment viene inizializzato, crea una finestra nascosta che viene utilizzata per l'indirizzamento dei messaggi inter-apartment e inter-process. Questa finestra deve avere la sua procedura standard per la gestione dei messaggi. Questo procedimento è noto come smistamento dei messaggi (message pump). Nelle versioni precedenti di Windows, un errore nel fare questo poteva causare un blocco a livello di sistema. Questo problema è ulteriormente complicato da alcune API di Windows che inizializzano COM come parte della loro implementazione, che causa a sua volta una mancanza di dettagli dell'implementazione del componente COM.

Conteggio dei riferimenti

[modifica | modifica wikitesto]

Uno scenario in cui il reference counting porta a problemi è quello in cui due oggetti COM si riferiscono l'un l'altro, come accade ad esempio usando i 'connection points' o gli 'event sink'. In questo caso nessuno dei due oggetti può rilasciare se stesso perché deve prima rilasciare l'altro, che dal canto suo non può farsi rilasciare perché ha ancora un riferimento all'oggetto che vorrebbe rilasciarlo. Questo circolo vizioso si può spezzare in due modi: una terminazione forzata (out-of-band termination) di uno dei due oggetti, oppure la creazione di due oggetti COM identici referenziati debolmente, di cui uno è usato per connettersi al partner di comunicazione e l'altro serve solo per terminare il primo.

Inferno delle DLL

[modifica | modifica wikitesto]

Ogni interfaccia COM è anche un contratto fra chiamante e chiamato: un programma che usa un componente COM deve assumere che i metodi che chiama si comporteranno sempre come previsto e non ha alcun controllo su di essi. Dal momento che la posizione di ogni componente è memorizzata in un luogo di livello sistema (in Windows nel registro di sistema), solamente una versione dello stesso componente può essere installata nel sistema in un dato momento, tipicamente la versione che l'ultima applicazione installata ha portato con sé; se il nuovo componente ha proprietà anche solo leggermente diverse da quello precedente, le altre applicazioni genereranno improvvisamente errori e comportamenti imprevedibili o casuali, senza alcun motivo apparente. Questo fenomeno è chiamato "DLL hell" ("Inferno delle DLL"), situazione tristemente nota a programmatori e amministratori di sistema. Con la RegFree COM[non chiaro] di Windows XP questo grave inconveniente può essere drasticamente ridotto.

  1. ^ Component Object Model Technologies, su microsoft.com, Microsoft Corporation.

Voci correlate

[modifica | modifica wikitesto]

Collegamenti esterni

[modifica | modifica wikitesto]
Controllo di autoritàLCCN (ENsh98001683 · GND (DE4489599-9 · J9U (ENHE987007561229605171
孕妇吃香蕉对胎儿有什么好处 押韵什么意思 女性尿液发黄是什么原因 肩周炎吃什么药 眼睛有点模糊是什么原因
晚上头疼是什么原因 苦荞茶喝了有什么好处 梦到买房子是什么意思 浪荡闲游是什么生肖 油条配什么好吃
足踝外科主要看什么 心脏右束支传导阻滞是什么意思 百叶是什么 tf口红是什么牌子 谁与争锋是什么意思
津液不足吃什么中成药 肌无力是什么病 什么提示你怀了女宝宝 乙状结肠ca是什么意思 视力突然模糊是什么原因引起的
用什么泡水喝对肝脏好hcv8jop7ns4r.cn 黄粱是什么意思hcv8jop6ns8r.cn 羊配什么生肖最好hcv8jop7ns7r.cn 脱肛吃什么药hcv8jop0ns5r.cn 老黄瓜炖什么好吃cl108k.com
皮肤容易过敏是什么原因yanzhenzixun.com 彩超低回声是什么意思hcv8jop9ns2r.cn 血漏是什么病hcv9jop5ns1r.cn 灵魂摆渡是什么意思hcv8jop1ns6r.cn 风象星座是什么意思hanqikai.com
精制盐是什么盐hcv8jop2ns0r.cn 农村补贴什么时候发放hcv8jop0ns9r.cn 内痔疮用什么药治最好效果最快hcv9jop1ns8r.cn 什么颜色加什么颜色等于黄色hcv8jop5ns4r.cn 黄体酮吃了有什么副作用hcv9jop6ns2r.cn
旺夫脸是什么脸型hcv8jop0ns2r.cn 躺着头晕是什么原因hcv8jop7ns7r.cn 苏格兰牧羊犬吃什么hcv8jop5ns6r.cn 什么人不适合艾灸hcv9jop1ns8r.cn 反差萌是什么意思hcv8jop4ns6r.cn
百度