<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; JScript/VBScript & Win32: расширение возможностей DynamicWrapperX]]></title>
		<link>http://forum.script-coding.com/viewtopic.php?id=5341</link>
		<atom:link href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=5341&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «JScript/VBScript & Win32: расширение возможностей DynamicWrapperX».]]></description>
		<lastBuildDate>Fri, 20 May 2011 12:09:25 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: JScript/VBScript & Win32: расширение возможностей DynamicWrapperX]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=48547#p48547</link>
			<description><![CDATA[<p>Объединил скрипт с родной DLL. <br />Собирал руками - поэтому возможны глюки.</p>]]></description>
			<author><![CDATA[null@example.com (chessman)]]></author>
			<pubDate>Fri, 20 May 2011 12:09:25 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=48547#p48547</guid>
		</item>
		<item>
			<title><![CDATA[Re: JScript/VBScript & Win32: расширение возможностей DynamicWrapperX]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=43886#p43886</link>
			<description><![CDATA[<p>Добавлено еще 2 встроенных метода:<br />1. GetIDispatch(&lt;Объект&gt;) возвращает указатель на объект - адрес памяти.</p><div class="codebox"><pre><code>Outlook = СоздатьОбъект(&quot;Outlook.Application&quot;);
pObj = Wrap.GetIDispatch(Outlook);</code></pre></div><p>2.GetObject(&lt;адрес&gt;) по указателю на объект возвращает объект. Метод вызывает AddRef объекта.</p><div class="codebox"><pre><code>Obj = Wrap.GetObject(pObj)</code></pre></div><p>Примеры приведены для 1С, но смысл я думаю понятен.</p>]]></description>
			<author><![CDATA[null@example.com (chessman)]]></author>
			<pubDate>Sun, 16 Jan 2011 19:49:51 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=43886#p43886</guid>
		</item>
		<item>
			<title><![CDATA[JScript/VBScript & Win32: расширение возможностей DynamicWrapperX]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=43318#p43318</link>
			<description><![CDATA[<p>Данный скрипт расширяет возможности объекта <a href="http://forum.script-coding.com/viewtopic.php?id=2214">DynamicWrapperX</a>, а именно:</p><p><strong>1.</strong> Добавляет новый встроенный метод RegisterAddr. Первый параметр - адрес памяти, остальные параметры, как у метода Register.<br /></p><div class="codebox"><pre><code>RegisterAddr( Addr, FuncName [, i=ParamTypes] [, r=RetValType] )</code></pre></div><p>Этот метод &quot;именует&quot; участок кода в виртуальном пространстве процесса. Это позволяет, например, сделать ассемблерную вставку из скрипта и напрямую обратиться к ней. Кроме этого, это позволяет обратится к &quot;кривым&quot; экспортным функциям (&quot;?GetBkEndUI@@YAPAVCBkEndUI@@XZ&quot;) и к функциям экспортируемым по ординалу.</p><p>Пример:<br /></p><div class="codebox"><pre><code>handle = Wrap.LoadLibrary(&quot;&quot;BkEnd&quot;&quot;)
Addr   = Wrap.GetProcAddress(handle, &quot;&quot;?GetBkEndUI@@YAPAVCBkEndUI@@XZ&quot;&quot;)     &#039;class CBkEndUI * __cdecl GetBkEndUI(void)    
Wrap.RegisterAddr Addr, &quot;&quot;GetBkEndUI&quot;&quot;, &quot;&quot;f=s&quot;&quot;, &quot;&quot;r=l&quot;&quot;</code></pre></div><p>Этим же методом можно легко организовать вызов _thiscall, сделав ассемблерную вставку:<br /></p><div class="codebox"><pre><code>handle = Wrap.LoadLibrary(&quot;&quot;blang&quot;&quot;)
func = Wrap.GetProcAddress(handle, &quot;&quot;?FindProc@CBLModule@@QBEHPBDH@Z&quot;&quot;)        &#039;CBLModule::FindProc
Wrap.RegisterAddr buf, &quot;&quot;FindProc&quot;&quot;, &quot;&quot;i=sl&quot;&quot;, &quot;&quot;r=l&quot;&quot;
.
.
.
Function this_call(ECX, Addr)                                &#039;    
    Wrap.NumPut &amp;hB9,                     buf, 0, &quot;&quot;b&quot;&quot;    &#039;    mov ecx, ....   pObj
    Wrap.NumPut ECX,                     buf, 1
    Wrap.NumPut    &amp;hE9,                     buf, 5, &quot;&quot;b&quot;&quot;    &#039;    jmp ...Addr
    Wrap.NumPut    Addr - (buf + 6 + 4),     buf, 6                &#039;
End Function</code></pre></div><p><strong>2.</strong> Снимает ограничение на количество вызовов RegisterCallBack. Это реализовано, путем организации связанного списка функций, аналогично, как это делает метод Register.</p><p>Технические исправления:<br />* в IClassFactory::CreateInstance изменен размер объекта на указатель на последний вызов RegisterCallBack;<br />* IDispatch::Release освобождается не только память под объект, но и память выделенная методами Register и обновленным RegisterCallBack; так же вызывается Release для объекта vbscript.</p><p>P.S. Всё сказанное относится к конкретной версии dll, т.к. в скрипте используются &quot;абсолютные&quot; offset&#039;ы, привязанные к файлу «dynwrapx.dll».<br />P.P.S. В связи с тем, что мой опыт программирования на ассемблере не велик, возможно что-то я сделал не оптимально, поэтому буду рад услышать критику.</p>]]></description>
			<author><![CDATA[null@example.com (chessman)]]></author>
			<pubDate>Wed, 05 Jan 2011 09:32:05 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=43318#p43318</guid>
		</item>
	</channel>
</rss>
