<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.miranda-ng.org/index.php?action=history&amp;feed=atom&amp;title=User%3ARMN%2FPlugin_Developer_Guide</id>
	<title>User:RMN/Plugin Developer Guide - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.miranda-ng.org/index.php?action=history&amp;feed=atom&amp;title=User%3ARMN%2FPlugin_Developer_Guide"/>
	<link rel="alternate" type="text/html" href="https://wiki.miranda-ng.org/index.php?title=User:RMN/Plugin_Developer_Guide&amp;action=history"/>
	<updated>2026-10-17T18:52:03Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://wiki.miranda-ng.org/index.php?title=User:RMN/Plugin_Developer_Guide&amp;diff=7446&amp;oldid=prev</id>
		<title>RMN: language-specific todo</title>
		<link rel="alternate" type="text/html" href="https://wiki.miranda-ng.org/index.php?title=User:RMN/Plugin_Developer_Guide&amp;diff=7446&amp;oldid=prev"/>
		<updated>2013-07-11T21:26:09Z</updated>

		<summary type="html">&lt;p&gt;language-specific todo&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 00:26, 12 July 2013&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;div style=&amp;quot;overflow:auto; height:auto;&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;div style=&amp;quot;overflow:auto; height:auto;&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Message|message=This page a draft. Please, do not translate or move it.}}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Message|message=This page a draft. Please, do not translate or move it.}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Todo|This is &#039;&#039;&#039;&#039;&#039;Miranda IM&#039;&#039;&#039; Plugin Developer Guide&#039;&#039;&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;. It needs revision and adaptation according to changes made to Miranda NG project.}}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Todo&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|lang=en&lt;/ins&gt;|This is &#039;&#039;&#039;&#039;&#039;Miranda IM&#039;&#039;&#039; Plugin Developer Guide&#039;&#039;&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;. It needs revision and adaptation according to changes made to Miranda NG project.}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/div&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/div&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Miranda IM&amp;#039;&amp;#039;&amp;#039; consists of the core, internal modules and external modules known as plugins.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Miranda IM&amp;#039;&amp;#039;&amp;#039; consists of the core, internal modules and external modules known as plugins.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key wiki_miranda_ng_org:diff:1.41:old-6605:rev-7446:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>RMN</name></author>
	</entry>
	<entry>
		<id>https://wiki.miranda-ng.org/index.php?title=User:RMN/Plugin_Developer_Guide&amp;diff=6605&amp;oldid=prev</id>
		<title>RMN at 08:15, 17 June 2013</title>
		<link rel="alternate" type="text/html" href="https://wiki.miranda-ng.org/index.php?title=User:RMN/Plugin_Developer_Guide&amp;diff=6605&amp;oldid=prev"/>
		<updated>2013-06-17T08:15:49Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 11:15, 17 June 2013&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;div style=&amp;quot;overflow:auto; height:auto;&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;div style=&amp;quot;overflow:auto; height:auto;&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Message|message=This page a draft. Please, do not translate or move it.}}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Message|message=This page a draft. Please, do not translate or move it.}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Warning&lt;/del&gt;|This is &#039;&#039;&#039;&#039;&#039;Miranda IM&#039;&#039;&#039; Plugin Developer Guide&#039;&#039;&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;. It needs revision and adaptation according to changes made to Miranda NG project.}}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Todo&lt;/ins&gt;|This is &#039;&#039;&#039;&#039;&#039;Miranda IM&#039;&#039;&#039; Plugin Developer Guide&#039;&#039;&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;. It needs revision and adaptation according to changes made to Miranda NG project.}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/div&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/div&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Miranda IM&amp;#039;&amp;#039;&amp;#039; consists of the core, internal modules and external modules known as plugins.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Miranda IM&amp;#039;&amp;#039;&amp;#039; consists of the core, internal modules and external modules known as plugins.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>RMN</name></author>
	</entry>
	<entry>
		<id>https://wiki.miranda-ng.org/index.php?title=User:RMN/Plugin_Developer_Guide&amp;diff=6576&amp;oldid=prev</id>
		<title>Wishmaster: /* Services */ another 64bit fix</title>
		<link rel="alternate" type="text/html" href="https://wiki.miranda-ng.org/index.php?title=User:RMN/Plugin_Developer_Guide&amp;diff=6576&amp;oldid=prev"/>
		<updated>2013-06-11T08:25:01Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Services: &lt;/span&gt; another 64bit fix&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 11:25, 11 June 2013&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l54&quot;&gt;Line 54:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 54:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Parameters and return value of a service function are defined by its author with one exception that  &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Parameters and return value of a service function are defined by its author with one exception that  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;return value should not be equal to &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;0x80000000 &lt;/del&gt;since it is reserved to indicate the &quot;service not found&quot;  &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;return value should not be equal to &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;CALLSERVICE_NOTFOUND &lt;/ins&gt;since it is reserved to indicate the &quot;service not found&quot;  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;error. Description of available services can be found in header files of Miranda IM SDK. The headers  &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;error. Description of available services can be found in header files of Miranda IM SDK. The headers  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;contain inline documentation about the services they provide. If a third party plugin module offers  &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;contain inline documentation about the services they provide. If a third party plugin module offers  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Wishmaster</name></author>
	</entry>
	<entry>
		<id>https://wiki.miranda-ng.org/index.php?title=User:RMN/Plugin_Developer_Guide&amp;diff=6575&amp;oldid=prev</id>
		<title>Wishmaster: /* Services */ 64bit services use INT_PTR</title>
		<link rel="alternate" type="text/html" href="https://wiki.miranda-ng.org/index.php?title=User:RMN/Plugin_Developer_Guide&amp;diff=6575&amp;oldid=prev"/>
		<updated>2013-06-11T08:24:15Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Services: &lt;/span&gt; 64bit services use INT_PTR&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 11:24, 11 June 2013&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l51&quot;&gt;Line 51:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 51:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The function being registered as a service implementation must have the following declaration  &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The function being registered as a service implementation must have the following declaration  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;int &lt;/del&gt;ServiceImplementation(WPARAM, LPARAM);&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;INT_PTR &lt;/ins&gt;ServiceImplementation(WPARAM, LPARAM);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Parameters and return value of a service function are defined by its author with one exception that  &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Parameters and return value of a service function are defined by its author with one exception that  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key wiki_miranda_ng_org:diff:1.41:old-6574:rev-6575:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Wishmaster</name></author>
	</entry>
	<entry>
		<id>https://wiki.miranda-ng.org/index.php?title=User:RMN/Plugin_Developer_Guide&amp;diff=6574&amp;oldid=prev</id>
		<title>RMN: MIM Plugin Developer Guide.pdf - needs revision and adaptation</title>
		<link rel="alternate" type="text/html" href="https://wiki.miranda-ng.org/index.php?title=User:RMN/Plugin_Developer_Guide&amp;diff=6574&amp;oldid=prev"/>
		<updated>2013-06-11T07:52:14Z</updated>

		<summary type="html">&lt;p&gt;MIM Plugin Developer Guide.pdf - needs revision and adaptation&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;div style=&amp;quot;overflow:auto; height:auto;&amp;quot;&amp;gt;&lt;br /&gt;
{{Message|message=This page a draft. Please, do not translate or move it.}}&lt;br /&gt;
{{Warning|This is &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Miranda IM&amp;#039;&amp;#039;&amp;#039; Plugin Developer Guide&amp;#039;&amp;#039;&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;. It needs revision and adaptation according to changes made to Miranda NG project.}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Miranda IM&amp;#039;&amp;#039;&amp;#039; consists of the core, internal modules and external modules known as plugins.&lt;br /&gt;
__TOC__&lt;br /&gt;
 &lt;br /&gt;
== Miranda IM Core ==&lt;br /&gt;
The core is a central part of Miranda. It is very light and has only basic things to make other part of the &lt;br /&gt;
system work. The core implements infrastructure to support modular design of Miranda. There are two &lt;br /&gt;
main mechanisms provided by the core: &amp;#039;&amp;#039;hooks&amp;#039;&amp;#039; and &amp;#039;&amp;#039;services&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
=== Hooks ===&lt;br /&gt;
Hook is a function that is called to notify the interested entity about some event happens. The core &lt;br /&gt;
maintains a hook table each entry of which consists of a hook name (string of chars) and a list of hook &lt;br /&gt;
subscribers. The core also provides the set of functions that operate the hook table to perform the &lt;br /&gt;
following tasks:&lt;br /&gt;
* Create and destroy an event that can be hooked by someone&lt;br /&gt;
* Hook an event that has been registered in the hook table&lt;br /&gt;
* Notify the subscribers of a particular event (trigger the event)&lt;br /&gt;
&lt;br /&gt;
Naming of a hook should follow the following convention &lt;br /&gt;
 &amp;quot;Module/Component/Hook&amp;quot; &lt;br /&gt;
&lt;br /&gt;
A hook being registered to the hook chain must use the following declaration &lt;br /&gt;
 int EventHook(WPARAM, LPARAM); &lt;br /&gt;
&lt;br /&gt;
Parameters of a hook are defined by the hook creator and its return value is used to indicate if the hook &lt;br /&gt;
chain must continue processing or not. You should return &amp;lt;tt&amp;gt;false&amp;lt;/tt&amp;gt; (0) if proceed with the chain &lt;br /&gt;
processing and &amp;lt;tt&amp;gt;true&amp;lt;/tt&amp;gt; (1) if the processing must be terminated. There are very rare situations in which &lt;br /&gt;
you need to break the hook chain.&lt;br /&gt;
&lt;br /&gt;
When an event is triggered a hook chain is processed by calling every registered event handler.&lt;br /&gt;
&amp;lt;!-- Picture 1. Pictures are going to be added when the article is adapted. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There is an ability to set default hook for the event. The default hook is called only in case the hook &lt;br /&gt;
chain for the event is empty.&lt;br /&gt;
&lt;br /&gt;
=== Services ===&lt;br /&gt;
Service is a way to publish some functionality using a common interface. The idea is to create an alias &lt;br /&gt;
to a function that implements a service, so you don&amp;#039;t call a functions provided by some module directly &lt;br /&gt;
but you use it through the service call. The core maintains a table of the services each entry of which &lt;br /&gt;
consists of a service name (string of chars) and a pointer to a function that implements the service. The &lt;br /&gt;
following API is provided by the core to deal with services:&lt;br /&gt;
* Create and destroy a service&lt;br /&gt;
* Call a service&lt;br /&gt;
* Check if a particular service exists&lt;br /&gt;
&lt;br /&gt;
Naming of a service should follow the following convention&lt;br /&gt;
 &amp;quot;Module/Component/Service&amp;quot; &lt;br /&gt;
&lt;br /&gt;
The function being registered as a service implementation must have the following declaration &lt;br /&gt;
 int ServiceImplementation(WPARAM, LPARAM);&lt;br /&gt;
&lt;br /&gt;
Parameters and return value of a service function are defined by its author with one exception that &lt;br /&gt;
return value should not be equal to 0x80000000 since it is reserved to indicate the &amp;quot;service not found&amp;quot; &lt;br /&gt;
error. Description of available services can be found in header files of Miranda IM SDK. The headers &lt;br /&gt;
contain inline documentation about the services they provide. If a third party plugin module offers &lt;br /&gt;
some services it should include corresponding header files with a usage and parameters description.&lt;br /&gt;
&lt;br /&gt;
=== Additional API ===&lt;br /&gt;
Currently the core also provides:&lt;br /&gt;
* Memory management function (allocation, deallocation, reallocation)&lt;br /&gt;
* Threading related routines&lt;br /&gt;
* Localization routines&lt;br /&gt;
* UTF-8 text encoding/decoding&lt;br /&gt;
&lt;br /&gt;
Internal memory management functions help to catch errors with memory allocation. They work &lt;br /&gt;
similarly to Microsoft&amp;#039;s debug CRT in Visual Studio – by marking borders of allocated block with &lt;br /&gt;
special symbols and instead of real freeing they also just mark the block as free so any father reference &lt;br /&gt;
to the block will indicate an error.&lt;br /&gt;
&lt;br /&gt;
Multithreading routines used to properly shut down user threads on Miranda exit.&lt;br /&gt;
&lt;br /&gt;
Localization routines offer text translation using different code pages.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Modules ==&lt;br /&gt;
The most of the basic functionality of Miranda resides in internal modules. There are numerous &lt;br /&gt;
internal modules which implement most of the basic features, they are netlib, protocols, options, &lt;br /&gt;
history, plugins, useronline and many others. You can find out the full list of internal modules in the &lt;br /&gt;
source code in &amp;quot;modules&amp;quot; directory. The internal modules provide many services and hookable events &lt;br /&gt;
which are used by external plugin modules.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Plugin Modules ==&lt;br /&gt;
Plugin is a module which can extend functionality of Miranda IM. Physically it is a DLL file that &lt;br /&gt;
exports certain functions. During loading the core iterates through the DLL files in the plugin directory &lt;br /&gt;
and calls WinAPI &amp;#039;&amp;#039;LoadLibrary&amp;#039;&amp;#039; function on every module found there, then it checks if a module has &lt;br /&gt;
the needed functions exported and if everything is right the module becomes loaded into the core. The &lt;br /&gt;
set of exported functions serves as an interface between a plugin module and the core. The core makes &lt;br /&gt;
calls to these functions to interact with a plugin.&lt;br /&gt;
&lt;br /&gt;
=== Plugin Types ===&lt;br /&gt;
The Miranda IM plugins can be divided into three groups: database plugins, contact list plugins and &lt;br /&gt;
general purpose plugins. The difference between them is in their interface to the core – the exported set &lt;br /&gt;
of functions.&lt;br /&gt;
&amp;lt;!-- Picture 2. Pictures are going to be added when the article is adapted. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Firstly, the core checks every loaded module for a general purpose plugin interface, then the core calls &lt;br /&gt;
&amp;#039;&amp;#039;MirandaPluginInfo&amp;#039;&amp;#039; function which returns the plugin description. If everything looks fine the core &lt;br /&gt;
determines if the module contains more definitely interface of a database or a contact list plugin. These &lt;br /&gt;
steps are known as plugin API checking. The core reports an error and shuts down Miranda if no &lt;br /&gt;
database or no contact list plugin has been found.&lt;br /&gt;
&lt;br /&gt;
After a module has been checked for correct API another function is called in the module – &amp;#039;&amp;#039;Load&amp;#039;&amp;#039;. This &lt;br /&gt;
call notifies the plugin that it was successfully loaded by the core and may initialize itself. Please note &lt;br /&gt;
that you must perform all the significant initialization during this call of &amp;#039;&amp;#039;Load&amp;#039;&amp;#039; and not during &lt;br /&gt;
DLLMain call since there are many restrictions on what you are allowed in the body of DLLMain. &lt;br /&gt;
Refer to MSDN documentation to know more about DLLMain restrictions. During the call of &amp;#039;&amp;#039;Load&amp;#039;&amp;#039; it &lt;br /&gt;
is guaranteed that the database module is already loaded and ready to work. But any other internal &lt;br /&gt;
modules are not initialized by that moment.&lt;br /&gt;
&lt;br /&gt;
During Miranda shutdown a reverse process is executed and the core calls &amp;#039;&amp;#039;Unload&amp;#039;&amp;#039; function in the &lt;br /&gt;
plugin so it can clean up itself. The database module is guaranteed to be still loaded during the &amp;#039;&amp;#039;Unload&amp;#039;&amp;#039; call.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; [http://addons.miranda-im.org/details.php?action=viewfile&amp;amp;id=3282 Source]&lt;/div&gt;</summary>
		<author><name>RMN</name></author>
	</entry>
</feed>