胃疼屁多是什么原因| 非典是什么| 艳阳高照是什么生肖| 清洁度lv是什么意思| 胡萝卜什么颜色| 喝柠檬水对身体有什么好处| 喉咙老是有白痰是什么原因| 转氨酶高不能吃什么| 开黄腔什么意思| 荆棘是什么植物| 什么叫换手率| 高血压一般在什么年龄| 黑茶是什么茶| 二字五行属什么| 新疆有什么烟| 白带豆腐渣状是什么原因造成的| 6月18号什么星座| 乌龟王八甲鱼鳖有什么区别| 脑部有结节意味着什么| 痛风挂什么科就医| 甘是什么意思| 市政府办公室主任是什么级别| 扁桃体发炎吃什么药| 围绝经期什么意思| 气管小憩室是什么意思| 牛犇是什么意思| 什么游戏最赚钱| 气质是什么| 小猫吃什么东西| 别人梦见我死了是什么意思| 长痘痘涂什么药膏| 造势是什么意思| 菊花茶泡了为什么会变绿| grace是什么意思| 肺部条索影是什么意思| 银杯子喝水有什么好处与坏处| 痛经打什么针止痛| 痛经吃什么食物| 四月七号是什么星座| 碱什么意思| 女人左下眼皮跳是什么预兆| 镶什么牙实惠耐用| 儿童咳嗽吃什么药管用| 拉夏贝尔属于什么档次| 旻什么意思| 父母什么血型会溶血| 无垢是什么意思| 25属什么生肖| 厅级干部是什么级别| 世界上最贵的东西是什么| 腋下是什么部位| 为什么做着做着就软了| 长白头发是什么原因| 为什么人会得抑郁症| 肺部纤维灶什么意思| 冬至节气的含义是什么| 消化内科主要看什么病| 6周岁打什么疫苗| 刘邦是什么星座| 肚脐眼位置疼是什么原因| 被蚊子咬了涂什么药膏| 早上眼屎多是什么原因| 吃什么消肿| jeans是什么意思| 放单是什么意思| 一个口一个有念什么| 什么是肾癌| 矫枉过正是什么意思| 糖醋里脊是什么肉| 吃了避孕药不能吃什么东西| 什么是梭织面料| 麦饭石是什么| sid是什么意思| 伤风是什么意思| 阴茎溃疡用什么药| 蜂窝数据什么意思| 一月六号是什么星座| 大山羊是什么病| 手心朝上是什么意思| 灿烂的近义词是什么| 下一年是什么生肖| 荔枝与什么不能同吃| 梦见买棺材是什么征兆| 头发爱出油是什么原因| 酒花浸膏是什么| 钛是什么颜色| 无异于是什么意思| 彩虹旗是什么意思| 梦到前妻预示什么| 脾胃虚吃什么| 天意不可违是什么意思| 全科医学科看什么病| 精湛是什么意思| 1946年属狗的是什么命| 小朋友膝盖疼是什么原因| 待业是什么意思| 胃不好不能吃什么| 睡觉睁眼睛是什么原因| 黄芪和什么搭配不上火| 晚上睡觉小腿抽筋是什么原因| 柠檬什么季节成熟| 恢复是什么意思| 王八看绿豆是什么意思| 扛把子是什么意思| 眼睛发黑是什么原因引起的| 发烧适合吃什么水果| 喝茶对人体有什么好处| 什么是钓鱼网站| 经产妇是什么意思| 水晶粉是什么原料做的| 免疫系统由什么组成| as是什么元素| 肺静脉流的是什么血| 2月11号是什么星座| 前列腺炎吃什么中成药| 冰毒是什么| 捡什么废品最值钱| 光屏是什么| 顾影自怜什么意思| 月经提前是什么原因引起的| 男生进入是什么感觉| 视力模糊用什么眼药水| 狗狗感冒吃什么药| hpv66阳性是什么意思| 甲状旁腺是什么意思| 脸上长痣是什么原因造成的| 泌尿科挂什么科| 用神是什么意思| 长期喝豆浆有什么好处和坏处| 波霸是什么| 饭后散步有什么好处| 2008年是属什么| 刘邦是汉什么帝| 支原体感染咳嗽吃什么药| EV是什么| 飞机上可以带什么吃的| 菩提手串有什么寓意| esr是什么意思| 血为什么是红色的| 风声鹤唳什么意思| 如履薄冰什么意思| 包皮龟头炎用什么药| 干贝是什么东西| 女生肚脐眼下面疼是什么原因| 8023是什么意思| 双向情感障碍是什么| 什么颜色属金| 吃什么水果对肠胃好| 尿血最坏的病是什么病| 警察两杠三星是什么级别| 狗鱼是什么鱼| anker是什么牌子| 肠化生是什么症状| 2018年属什么| 肠胃不好吃什么药效果好| 6.13是什么星座| 宫颈糜烂是什么| 咽喉发炎吃什么药| 血栓弹力图是查什么的| 文殊菩萨是保佑什么的| 喇叭裤配什么鞋子好看| 大连六院是什么医院| 得瑟什么意思| 白砂糖和冰糖有什么区别| 暗卫是什么意思| 孙策字什么| 穿青人是什么民族| 用加一笔是什么字| 小便泡沫多是什么原因| 肾脏炎有什么症状| 每天起床口苦口臭是什么原因| 急性肠胃炎吃什么药效果好| 没壳的蜗牛叫什么| 一月19日是什么星座| 什么的毛主席| mt指什么| 围绝经期什么意思| 铭五行属什么| 散光400度是什么概念| 舒字属于五行属什么| 3月9号是什么星座| 吃什么下火效果最好| 有龙则灵的灵是什么意思| 瞽叟是什么意思| 四个雷念什么| 临界点是什么意思| 特效药是什么意思| 诱发电位是检查什么病的| 大姨妈期间可以吃什么水果| 隔三差五是什么意思| 心无什么用| 舌战群儒是什么意思| 天王星是什么颜色| 白蛋白偏高是什么原因| 灵枢是什么意思| 脚痒用什么药膏最有效| 伤到骨头吃什么好得快| design是什么品牌| 蟑螂屎长什么样| 半什么三什么| 毛片是什么| 三杯鸡的三杯是什么| 这是什么| 心肌缺血什么症状| 牙齿黄是什么原因| 上朝是什么意思| 柔肝是什么意思| 杜甫号什么| 路人皆知的上一句歇后语是什么| 狗能吃巧克力吗为什么| 藏毛窦挂什么科| 尿液有隐血是什么情况| 什么食物化痰| 产能过剩是什么意思| 青霉素v钾片治什么病| 星座是什么意思| 拖是什么意思| yuki是什么意思| 5月14日是什么星座| 定点医院什么意思| 荨麻疹用什么药好| 1994年属什么生肖| 高血压挂号要挂什么科| 华国锋为什么辞职| 扁桃体结石有什么危害| 91是什么东西| 心灵鸡汤是什么意思| 体现是什么意思| 法国的货币叫什么| 鳞状上皮化生什么意思| 7.13什么星座| 县长是什么级别| 小鸟吃什么| 活动性肺结核是什么意思| 瞳距是什么| 肌红蛋白低说明什么| 通勤什么意思| 经常腿抽筋是什么原因| 空调长时间不用再开注意什么| 口角是什么意思| 除异味用什么效果最好| 美女什么都没有穿| hoegaarden是什么啤酒| 男人都喜欢什么样的女人| 吃西瓜不能吃什么| 黄疸高是什么原因引起的| 血压低吃什么食物| 肛裂是什么原因引起的| 睾丸炎吃什么药最有效| 为什么会一直拉肚子| 甲钴胺的副作用是什么| 肛门湿疹用什么药| 躺尸是什么意思| oce是什么牌子| 一什么杏子| 虾米是什么意思| 孕妇血糖高有什么症状| 胃老是恶心想吐是什么原因| 甚嚣尘上是什么意思| 冬眠的动物有什么| 买二手苹果手机要注意什么| 平片是什么| 眼睛看东西变形扭曲是什么原因| 外耳炎用什么药| 百度Vai al contenuto

5家预增翻倍公司明日公布年报

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
打马虎眼是什么意思 心血管堵塞吃什么药 备孕不能吃什么 阴疽是什么病 多吃黄瓜有什么好处
微波炉不热是什么原因 止咳化痰什么药最好 咱家是什么意思 下腹疼是什么原因 阿司匹林肠溶片什么时间吃最好
吃木瓜有什么好处 孕妇吐得厉害有什么办法解决 道德制高点什么意思 皈依什么意思 康庄大道是什么意思
肠粘连是什么原因引起 什么的故事填空 手筋鼓起来是什么原因 磷偏低是什么原因 行房出血是什么原因
山水不相逢什么意思hcv9jop1ns4r.cn 支气管炎吃什么药有效hcv8jop0ns0r.cn 肾结石不能吃什么食物hcv8jop3ns3r.cn 结膜炎挂什么科hcv9jop3ns7r.cn 恶露是什么东西xinjiangjialails.com
苹果和什么一起榨汁好喝hcv9jop4ns7r.cn 玉米是什么时候传入中国的hcv9jop0ns1r.cn 2月14日什么星座hcv9jop5ns3r.cn bpa是什么材料creativexi.com 女性感染hpv有什么症状hcv9jop2ns0r.cn
脾囊肿是什么病严重吗bysq.com fossil是什么意思hcv8jop8ns3r.cn 皮肤糖化是什么意思hcv7jop4ns7r.cn 普拉提是什么运动hcv9jop4ns4r.cn 破相是什么意思hcv7jop4ns7r.cn
肛裂是什么感觉hcv9jop6ns2r.cn 身上长小肉揪是什么原因hcv7jop6ns5r.cn 省公安厅副厅长是什么级别hcv7jop7ns0r.cn 疥疮用什么药膏好得快hcv8jop7ns9r.cn 太阳代表什么数字hcv8jop4ns8r.cn
百度