<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; Объект Atomix.LangMF в среде JScript]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=1893</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=1893&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «Объект Atomix.LangMF в среде JScript».]]></description>
		<lastBuildDate>Fri, 11 Jul 2008 13:31:43 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Объект Atomix.LangMF в среде JScript]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=12462#p12462</link>
			<description><![CDATA[<p>Удалось выяснить некоторые интересные особенности объекта Atomix.LangMF созданного в среде JScript.</p><p>Потребуется установленный <a href="http://langmf.ru/ftp/archive/LangMF_9.0.exe">LangMF 9.0</a><br />ОС WinXP/7<br />Lang. Jscript</p><p>Пользуясь тем, что функции JScript имеют свойства объекта, можно вызывать код JScript из области LangMF, путем непосредственной передачи функции:<br /></p><div class="codebox"><pre><code>
sLMFCode= 
&#039;&lt;#Module=JScriptfromMF&gt;\n\
Public strStr\n\
Sub Load(cmdstr)\n\
sampleCall_imp(&quot;hello script!&quot;)\n\
End Sub\n\
&lt;#Module&gt;&#039;

var oLMF = new ActiveXObject(&quot;Atomix.LangMF&quot;)
oLMF.Script.AddObject(&quot;sampleCall_imp&quot;, sampleCall)
oLMF.Command(sLMFCode)
oLMF.Reset()
//------------------------------------------------------------------
function sampleCall(text)
{
return WScript.Echo(text)
}
</code></pre></div><p>JScript позволяет передавать данные в область LangMF непосредственно, пользуясь объектами Number и String, вместо использования специфических объектов носителей данных, или обходного использования метода FuncRun, для вызова функций с параметрами.<br /><strong>тип String:</strong><br /></p><div class="codebox"><pre><code>
var obj = new String
obj.value = &#039;hello langMf&#039;

sLMFCode= 
&#039;&lt;#Module=JScriptfromMF&gt;\n\
Public strStr\n\
Sub Load(cmdstr)\n\
MsgBox sampleObj_imp.value,vbExclamation + vbSystemModal,&quot;oLMF&quot;\n\
End Sub\n\
&lt;#Module&gt;&#039;
    
var oLMF = new ActiveXObject(&quot;Atomix.LangMF&quot;)
oLMF.Script.AddObject(&quot;sampleObj_imp&quot;, obj)
oLMF.Command(sLMFCode)
oLMF.Reset()
</code></pre></div><p><strong>тип Number:</strong><br /></p><div class="codebox"><pre><code>
var obj = new Number
obj.value = 1234

sLMFCode= 
&#039;&lt;#Module=JScriptfromMF&gt;\n\
Public strStr\n\
Sub Load(cmdstr)\n\
End Sub\n\
Function ShowMeNumber()\n\
MsgBox sampleObj_imp.value,vbExclamation + vbSystemModal,&quot;oLMF&quot;\n\
End Function\n\
&lt;#Module&gt;&#039;
    
var oLMF = new ActiveXObject(&quot;Atomix.LangMF&quot;)

oLMF.Command(sLMFCode)
oLMF.Script.AddObject(&quot;sampleObj_imp&quot;, obj)
oLMF.FuncRun(&quot;ShowMeNumber&quot;,1)
oLMF.Reset()
</code></pre></div><p>Также возможна передача объекта-конструктора, содержащего в себе как данные, так и методы, в.т.ч использующие ActiveXCom объекты:<br /></p><div class="codebox"><pre><code>
//[Конструирование объекта]
//------------------------------------------------------------------
var obj = new sampleObj
function sampleObj()
{
}

sampleObj.property = &#039;hello script&#039;
sampleObj.method = function mtd()
    {
    var wShell=new ActiveXObject(&#039;Shell.Application&#039;)
    wShell.MinimizeAll()
    }

//[Внедрение объекта в область LangMf и его активация]
//------------------------------------------------------------------
sLMFCode= 
&#039;&lt;#Module=JScriptfromMF&gt;\n\
Public strStr\n\
Sub Load(cmdstr)\n\
MsgBox sampleObj_imp.property,vbExclamation + vbSystemModal,&quot;oLMF&quot;\n\
sampleObj_imp.method\n\
End Sub\n\
&lt;#Module&gt;&#039;
    
var oLMF = new ActiveXObject(&quot;Atomix.LangMF&quot;)
oLMF.Script.AddObject(&quot;sampleObj_imp&quot;, sampleObj)
oLMF.Command(sLMFCode)
oLMF.Reset()
</code></pre></div><p>======================================================<br />Необязательно включать код LangMF в область WSH скрипта, т.к многие функционалы LangMF доступны через метод Command, а обмен данными между JScript и LangMF можно осуществлять с помощью экспорта функций и объектов JScript в область LangMF.</p><p>Диалог выбора каталога <strong>dlg.js</strong>:<br /></p><div class="codebox"><pre><code>
 var BUFER
 var sFolder = new String

 var LMF = new ActiveXObject(&quot;Atomix.LangMF&quot;)

 LMF.Command(&#039;Sub Load(cmd) \ End Sub&#039;)

 LMF.Script.AddObject(&#039;RCV&#039;, Reseiver)
 LMF.Script.AddObject(&#039;sFolderRef&#039;, sFolder)

 LMF.Command(&#039;RCV(Sys.CDlg.ShowFolder(&quot;Выбор каталога&quot;, 0, &amp;H10)) /run&#039;)
 sFolder.Value = BUFER

 //Сообщение
 LMF.Command(	&#039;Sys.DynApi.CallFunction \
		&quot;USER32.DLL&quot;, \
		&quot;MessageBoxA&quot;, \
		0, \
		&quot;Выбранный каталог:&quot; &amp; vbCRLF &amp; \
		 sFolderRef.Value, \
		&quot;Reply&quot;, \
		64+4096 /run&#039;)

 LMF.Reset()
 WScript.Quit()

 //--------------------------------	
 function Reseiver(DATA)
 {
	BUFER = DATA
 }
</code></pre></div><p>Подобное можно отнести и к VBScript. Диалог выбора каталога <strong>dlg.vbs</strong>:<br /></p><div class="codebox"><pre><code>
Dim FolderPath

Set LMF = CreateObject(&quot;Atomix.LangMF&quot;)
LMF.Command &quot;Sub Load(cmd) \ End Sub&quot;
LMF.Script.AddObject &quot;MyContext&quot;, Me

LMF.Command &quot;MyContext.FolderPath = Sys.CDlg.ShowFolder(&quot;&quot;Выбор каталога&quot;&quot;, 0, &amp;H10) /run&quot;

LMF.Command(	&quot;Sys.DynApi.CallFunction&quot; &amp; _
		&quot;&quot;&quot;USER32.DLL&quot;&quot;,	&quot; &amp; _
		&quot;&quot;&quot;MessageBoxA&quot;&quot;,&quot; &amp; _
		&quot;0,&quot; &amp; _
		&quot;&quot;&quot;Выбранный каталог:&quot;&quot; &amp; vbCRLF &amp; &quot; &amp; _
		&quot;MyContext.FolderPath,&quot; &amp; _
		&quot;&quot;&quot;Reply&quot;&quot;,&quot; &amp; _
		&quot;64+4096 /run&quot;)
	
LMF.Reset()
WScript.Quit()
</code></pre></div><p>Интересно, что способность [Atomix.LangMF] выполнять код LangMF в другой среде, наследуется от объекта [MSScriptControl] из модуля msscript.ocx, который библиотека LangMF.dll требует для своей работы.</p>]]></description>
			<author><![CDATA[null@example.com (Poltergeyst)]]></author>
			<pubDate>Fri, 11 Jul 2008 13:31:43 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=12462#p12462</guid>
		</item>
	</channel>
</rss>
