<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh">
	<id>https://arolstar52-zhtest.hf.space/index.php?action=history&amp;feed=atom&amp;title=IUnknown</id>
	<title>IUnknown - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://arolstar52-zhtest.hf.space/index.php?action=history&amp;feed=atom&amp;title=IUnknown"/>
	<link rel="alternate" type="text/html" href="https://arolstar52-zhtest.hf.space/index.php?title=IUnknown&amp;action=history"/>
	<updated>2026-07-13T19:05:43Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://arolstar52-zhtest.hf.space/index.php?title=IUnknown&amp;diff=2806438&amp;oldid=prev</id>
		<title>imported&gt;Wolfch：​/* 方法 */</title>
		<link rel="alternate" type="text/html" href="https://arolstar52-zhtest.hf.space/index.php?title=IUnknown&amp;diff=2806438&amp;oldid=prev"/>
		<updated>2026-01-01T00:38:28Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;方法&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{noteTA&lt;br /&gt;
|G1=IT&lt;br /&gt;
|G2=Windows&lt;br /&gt;
|2=zh-hans:组件对象模型; zh-hant:元件物件模型;&lt;br /&gt;
|3=zh-hans:对象链接与嵌入;zh-hant:物件連結與嵌入;&lt;br /&gt;
|4=zh-hans:对象; zh-hant:物件;&lt;br /&gt;
|5=zh-hans:组件; zh-hant:元件;&lt;br /&gt;
|6=zh-hans:链接; zh-hant:連結;&lt;br /&gt;
|7=zh-hans:程序; zh-hant:程式;&lt;br /&gt;
}}&lt;br /&gt;
在[[程序设计]]中，&amp;#039;&amp;#039;&amp;#039;IUnknown&amp;#039;&amp;#039;&amp;#039;[[介面 (資訊科技)|介面]]是[[组件对象模型]]（COM）中的基礎介面。COM規格書&amp;lt;ref&amp;gt;{{Cite web |url=http://www.microsoft.com/com/resources/comdocs.asp |title=COM specification |access-date=2016-12-26 |archive-url=https://web.archive.org/web/20161221063614/http://www.microsoft.com/Com/resources/comdocs.asp |archive-date=2016-12-21 |dead-url=yes }}&amp;lt;/ref&amp;gt;中規定COM物件至少要實現此一介面，而且其他所有的COM介面都需要衍生自IUnknown介面。IUnknown提供所有COM物件都支援的兩種基本特性：利用[[引用计数]]來進行物件生命周期管理，以及存取許多事先定義的介面。&lt;br /&gt;
&lt;br /&gt;
IUnknown介面會包括一個指向[[虛擬方法表]]的[[指標_(電腦科學)|指標]]，虛擬方法表是一個有許多[[函数指针]]的列表，函数指针會指向許多實現IUnknown介面所宣告的函數，以和介面中宣告順序相同的方式排列。而進程內呼叫產生的{{le|開銷 (程式)|Overhead (computing)|開銷}}大致和[[C++]]中呼叫[[虛擬方法]]的開銷相近。&lt;br /&gt;
&lt;br /&gt;
==方法==&lt;br /&gt;
IUnknown介面中有三個[[方法 (電腦科學)|方法]]：&amp;lt;code&amp;gt;QueryInterface&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;AddRef&amp;lt;/code&amp;gt;和 &amp;lt;code&amp;gt;Release&amp;lt;/code&amp;gt;：&amp;lt;ref name=&amp;quot;msdn2&amp;quot;&amp;gt;[http://msdn2.microsoft.com/en-us/library/ms680509.aspx IUnknown definition] {{Wayback|url=http://msdn2.microsoft.com/en-us/library/ms680509.aspx |date=20130711070948 }} at [http://microsoft microsoft.com] {{Wayback|url=http://microsoft/ |date=20130711070948 }}; accessed 18-Jan-2008&amp;lt;/ref&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;QueryInterface&amp;lt;/code&amp;gt;可以讓呼叫此物件的程式可以確認此物件是否支援特定的介面，若是支援，則參考到此物件在特定介面下的實現。這個方法類似[[C++]]的&amp;lt;code&amp;gt;[[執行期型態訊息|dynamic_cast]]&amp;amp;lt;&amp;amp;gt;&amp;lt;/code&amp;gt;或是[[Java]]或是[[C♯|C#]]的[[型態轉換|casts]]。此方法在給定一個對應特定介面的[[全局唯一标识符]]（一般也稱為介面标识符或是IID）時，可以提供一個指定特定介面的指標。若COM物件不支援此介面，會回覆E_NOINTERFACE錯誤。&lt;br /&gt;
* &amp;lt;code&amp;gt;AddRef&amp;lt;/code&amp;gt;是在新的客戶端程式要存取此物件時，讓計數值加一，會回傳更新後的計數值。&lt;br /&gt;
* &amp;lt;code&amp;gt;Release&amp;lt;/code&amp;gt;是在客戶端程式已結束存取此物件，讓計數值減一，會回傳更新後的計數值，若計數值已變為零，會自動刪除此一COM物件。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
interface IUnknown {&lt;br /&gt;
  virtual HRESULT QueryInterface (REFIID riid, void **ppvObject) = 0;&lt;br /&gt;
  virtual ULONG   AddRef () = 0;&lt;br /&gt;
  virtual ULONG   Release () = 0;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;IUnknown&amp;#039;&amp;#039;&amp;#039;本身的介面标识符為{00000000-0000-0000-C000-000000000046}，IUnknown的三個方法都是[[虛擬函式|純虛擬方法]]（宣告時都有加上&amp;lt;code&amp;gt;= 0&amp;lt;/code&amp;gt;），因此無法定義IUnknown類別的物件，需要由其他類別繼承IUnknown，才能定義對應類別的物件。&lt;br /&gt;
&lt;br /&gt;
==其他 ==&lt;br /&gt;
*以[[ActiveX]]標準設計的元件至少需要實現IUnknown介面&amp;lt;ref name=&amp;quot;msdn1&amp;quot;&amp;gt;[http://msdn2.microsoft.com/en-us/library/aa751968.aspx ActiveX Controls] {{Wayback|url=http://msdn2.microsoft.com/en-us/library/aa751968.aspx |date=20080124120709 }} at [http://microsoft.com microsoft.com] {{Wayback|url=http://microsoft.com/ |date=20080124120709 }}; accessed 18-Jan-2008&amp;lt;/ref&amp;gt;。&lt;br /&gt;
*IUnknown也是[[MacOS|MacOS X]]中{{le|Core Foundation|Core Foundation}} CFPlugIn框架的基礎&amp;lt;ref name=&amp;quot;adc1&amp;quot;&amp;gt;[http://developer.apple.com/library/mac/documentation/CoreFoundation/Conceptual/CFPlugIns/CFPlugIns.pdf Plug-ins] {{Wayback|url=http://developer.apple.com/library/mac/documentation/CoreFoundation/Conceptual/CFPlugIns/CFPlugIns.pdf |date=20111007063809 }} at [http://apple.com apple.com] {{Wayback|url=http://apple.com/ |date=20110223124708 }}; accessed 18-Sept-2011&amp;lt;/ref&amp;gt;&lt;br /&gt;
*在[[Mozilla]]應用程式的開發中，IUnknown介面也稱為nsISupports。&lt;br /&gt;
==參考資料==&lt;br /&gt;
{{reflist}}&lt;br /&gt;
&lt;br /&gt;
==相關條目==&lt;br /&gt;
*[[IDispatch]]&lt;br /&gt;
*[[IFilter]]&lt;br /&gt;
*[[IInspectable]]&lt;br /&gt;
*[[IObjectWithSite]]&lt;br /&gt;
*[[IOleObject]]&lt;br /&gt;
&lt;br /&gt;
==外部連結==&lt;br /&gt;
* [http://www.codeproject.com/kb/com/com_in_c1.aspx COM in plain C]{{Wayback|url=http://www.codeproject.com/kb/com/com_in_c1.aspx |date=20151105010714 }}&lt;br /&gt;
&lt;br /&gt;
[[Category:面向对象的程序设计]]&lt;br /&gt;
[[Category:微軟API]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Wolfch</name></author>
	</entry>
</feed>