<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; VBScript: используем классы .NET]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=1139&amp;type=atom" />
	<updated>2010-06-02T19:08:34Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=1139</id>
		<entry>
			<title type="html"><![CDATA[Re: VBScript: используем классы .NET]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=36300#p36300" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>The Gray Cardinal пишет:</cite><blockquote><p>Затем поместите сборку в кэш сборок подобной командой:<br /></p><div class="codebox"><pre><code>C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin&gt;gacutil /i c:\temp\ObjectFerm.dll</code></pre></div></blockquote></div><p>Чтобы поместить сборку в кэш (GAC), совсем необьязательно пользоваться утилитой <strong>gacutil</strong>. Достаточно просто перетащить нужную сборку методом Drag &amp; Drop в папку кэша C:\WINDOWS\assembly открытую в Проводнике.</p><p>Обязательно, чтобы сборка была подписана, например при компилляции, с помощью <a href="http://forum.script-coding.com/viewtopic.php?pid=8989#p8989">ключа</a> сгенерированого утилитой <strong>sn</strong>, иначе кэш не примет неподписанную сборку.</p>]]></content>
			<author>
				<name><![CDATA[Poltergeyst]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=83</uri>
			</author>
			<updated>2010-06-02T19:08:34Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=36300#p36300</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBScript: используем классы .NET]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=28516#p28516" />
			<content type="html"><![CDATA[<p>Ещё один вариант такого же скрипта, но с меньшей «ручной» завязкой на координаты и размеры:<br /></p><div class="codebox"><pre><code>Option Explicit

Dim objNetForm
Dim objTextBox
Dim objButtonOK, objButtonCancel

ReDim arrRadioButtons(0)

Dim i
Dim arrVariants
Dim strTitle
Dim strDescription

arrVariants    = Array(&quot;Вариант 1&quot;, &quot;Вариант 2&quot;, &quot;Вариант 3&quot;, &quot;Вариант 4&quot;, &quot;Вариант 5&quot;)
strTitle       = &quot;Выберете один из вариантов&quot;
strDescription = &quot;Наша Таня громко плачет, уронила в речку мячик. Тише, Танечка, не плачь, не утонет в речке мяч.&quot; &amp; vbCrLf &amp; vbCrLf &amp; _
    &quot;Идет бычок, качается, вздыхает на ходу, вот-вот доска кончается, сейчас я упаду.&quot; &amp; vbCrLf &amp; vbCrLf &amp; _
    &quot;Зайку бросила хозяйка, под дождём остался зайка. Со скамейки слезть не мог, весь до ниточки промок.&quot; &amp; vbCrLf &amp; vbCrLf &amp; _
    &quot;Уронили мишку на пол, оторвали мишке лапу. Всё равно его не брошу, потому что он хороший.&quot; &amp; vbCrLf &amp; vbCrLf &amp; _
    &quot;Посвящается всем, вспомнившим голодное детство, деревянные игрушки и автора этих стихов :).&quot;

&#039;-----------------------------------------------------------------------------
Set objNetForm = WScript.CreateObject(&quot;System.Windows.Forms.Form&quot;)
&#039;-----------------------------------------------------------------------------
Set objTextBox = WScript.CreateObject(&quot;System.Windows.Forms.TextBox&quot;)

With objTextBox
    .Text    = strDescription
    
    .Left    = 10
    .Top     = 10
    
    .WordWrap   = True
    .MultiLine  = True
    .ScrollBars = 3
    
    .Width = 300
    .Size  = .GetPreferredSize(.Size)
    
    .ReadOnly = True
    
    .Parent = objNetForm
End With
&#039;-----------------------------------------------------------------------------
ReDim Preserve arrRadioButtons(UBound(arrVariants))

For i = LBound(arrVariants) To UBound(arrVariants)
    Set arrRadioButtons(i) = WScript.CreateObject(&quot;System.Windows.Forms.RadioButton&quot;)
    
    With arrRadioButtons(i)
        .Text         = arrVariants(i)
        
        .Left         = objTextBox.Left
        
        If i = LBound(arrVariants) Then
            .Top      = objTextBox.Top + objTextBox.Height
            .Checked  = True
        Else
            .Top      = arrRadioButtons(i - 1).Top + arrRadioButtons(i - 1).Height
        End If
        
        .Parent       = objNetForm
    End With
Next
&#039;-----------------------------------------------------------------------------
Set objButtonOK = WScript.CreateObject(&quot;System.Windows.Forms.Button&quot;)

With objButtonOK
    .Text         = &quot;OK&quot;
    
    .Left         =  10
    .Top          = _
        arrRadioButtons(UBound(arrRadioButtons)).Top + _
        arrRadioButtons(UBound(arrRadioButtons)).Height + 10
    
    .Parent = objNetForm
    .DialogResult = 1
End With


Set objButtonCancel = WScript.CreateObject(&quot;System.Windows.Forms.Button&quot;)

With objButtonCancel
    .Text         = &quot;Отмена&quot;
    
    .Left         = objButtonOK.Left + objButtonOK.Width + 10
    .Top          = objButtonOK.Top
    
    .Parent       = objNetForm
    .DialogResult = 2
End With
&#039;---------------------------------------------------------------
With objNetForm
    .Text = strTitle
    
    .MaximizeBox = False
    .MinimizeBox = False
    
    .AcceptButton = objButtonOK
    .CancelButton = objButtonCancel
    
    .FormBorderStyle = 1
    
    &#039; Тут бы надо задавать никак не «.Size», а «.ClientSize», но как с этим танцевать — непонятно…
    .Width    = objButtonCancel.Left + objButtonCancel.Width  + 10
    .Height   = objButtonCancel.Top  + objButtonCancel.Height + 10
    &#039; …ну, да ладно, хотя бы относительно поправим через…
    .AutoSize = True
    
    .TopMost       = True
    .StartPosition = 1
    
    objTextBox.TabIndex = UBound(arrRadioButtons) + 3
End With
&#039;---------------------------------------------------------------

&#039;---------------------------------------------------------------
objNetForm.ShowDialog()

If objNetForm.DialogResult = 1 Then
    For i = LBound(arrRadioButtons) To UBound(arrRadioButtons)
        If arrRadioButtons(i).Checked Then
            WScript.Echo &quot;Выбрано: #&quot; &amp; CStr(i + 1) &amp; &quot;, Text:&quot;, arrRadioButtons(i).Text
            
            Exit For
        End If
    Next
Else
    WScript.Echo &quot;Выбора не было сделано.&quot;
End If


objNetForm.Dispose()

Set objNetForm = Nothing

WScript.Quit 0</code></pre></div><p>Массив «arrVariants» — варианты выбора, «strTitle» — заголовок окна,&nbsp; «strDescription» — поясняющий текст.</p><p>С низким поклоном в сторону коллеги <strong>Poltergeyst</strong>&#039;а.</p>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2009-09-23T02:47:19Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=28516#p28516</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBScript: используем классы .NET]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=28504#p28504" />
			<content type="html"><![CDATA[<p>Очень простой диалог множественного выбора, использующий классы .NET, выполнен на VBScript. </p><div class="codebox"><pre><code>&#039;---------------------------------------------------------------
&#039; Очень простой диалог множественного выбора, использующий классы
&#039; .NET, выполнен на VBScript. 
&#039;---------------------------------------------------------------
&#039; NET Framework v2.0.50727
&#039; OC WinME/XP
&#039;---------------------------------------------------------------
 Set Form1    =CreateObject(&quot;System.Windows.Forms.Form&quot;)

 Set Radio1    =CreateObject(&quot;System.Windows.Forms.RadioButton&quot;)
 Set Radio2    =CreateObject(&quot;System.Windows.Forms.RadioButton&quot;)
 Set Radio3    =CreateObject(&quot;System.Windows.Forms.RadioButton&quot;)

 Set Button1    =CreateObject(&quot;System.Windows.Forms.Button&quot;)
 Set Button2    =CreateObject(&quot;System.Windows.Forms.Button&quot;)
&#039;---------------------------------------------------------------
 Form1.Text         = &quot;Диалог выбора&quot;
 Form1.MaximizeBox     = False
 Form1.MinimizeBox     = False
 Form1.Width        = 340
 Form1.Height        = 150
 Form1.AutoSize     = True

 Button1.Parent = Form1
 Button2.Parent = Form1
 Radio1.Parent = Form1
 Radio2.Parent = Form1
 Radio3.Parent = Form1
&#039;---------------------------------------------------------------
 With Button1
    .Text    = &quot;Отмена&quot;
    .Left    = 10
    .Top    = 120
    .Width    = 150
    .Height    = 20
    .DialogResult = vbCancel
 End With
&#039;---------------------------------------------------------------
 With Button2
    .Text = &quot;Принять&quot;
    .Left    = 170
    .Top    = 120
    .Width    = 150
    .Height    = 20
    .DialogResult = vbOk
 End With
&#039;---------------------------------------------------------------
 With Radio1
    .Left    = 10
    .Top    = 10
    .Width    = 310
    .Height    = 20
    .Text    = &quot;Вариант 1&quot;
    .Checked = True
 End With
&#039;---------------------------------------------------------------
 With Radio2
    .Left    = 10
    .Top    = 50
    .Width    = 310
    .Height    = 20
    .Text    = &quot;Вариант 2&quot;
 End With    
&#039;---------------------------------------------------------------
 With Radio3
    .Left    = 10
    .Top    = 90
    .Width    = 310
    .Height    = 20
    .Text    = &quot;Вариант 3&quot;
 End With    
&#039;---------------------------------------------------------------
 Form1.CancelButton=Button1
 Form1.CancelButton=Button2
 Form1.ShowDialog

 If Form1.DialogResult = vbOk Then 
    If Radio1.Checked Then  FinalizeDialog(Radio1.Text)
    If Radio2.Checked Then  FinalizeDialog(Radio2.Text)
    If Radio3.Checked Then  FinalizeDialog(Radio3.Text)
 End If

 WScript.Quit()
&#039;---------------------------------------------------------------
 Sub FinalizeDialog(Choice)
    MsgBox Choice, vbSystemModal Or vbInformation, &quot;Результат выбора&quot;
 End Sub
&#039;---------------------------------------------------------------</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Poltergeyst]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=83</uri>
			</author>
			<updated>2009-09-22T17:57:54Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=28504#p28504</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBScript: используем классы .NET]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=8989#p8989" />
			<content type="html"><![CDATA[<p>Пишем минимальный COM-сервер на VB.NET. По мотивам и в продолжение статьи <a href="http://www.script-coding.com/DotNet/CmdLineCompiler.html">Использование консольного компилятора .NET Framework для создания приложений</a>.<br />Создаём текстовый файл с расширением .vb следующего содержания:<br /></p><div class="codebox"><pre><code>Imports System
Imports System.Reflection

&lt;Assembly:AssemblyKeyFile(&quot;./Key.sn&quot;)&gt;
&lt;Assembly:AssemblyVersion(&quot;1.0.0.0&quot;)&gt;

Namespace TestComponentLib

Public Interface ITestComponent
    Function Mult (x As Integer, y As Integer) As Integer
    ReadOnly Property About() As String
End Interface

Public class TestComponent
    Implements ITestComponent

    Public Function Mult (x As Integer, y As Integer) As Integer Implements ITestComponent.Mult
        Mult = x * y
    End Function

    Public ReadOnly Property About() As String Implements ITestComponent.About
        Get
            Return &quot;Этот COM-сервер написан на VB.NET.&quot;
        End Get
    End Property
End Class

End Namespace</code></pre></div><p>Как видно из кода, наш COM-сервер <strong>TestComponentLib.TestComponent</strong> будет поддерживать свойство только для чтения <strong>About</strong>, которое возвращает строку, а также метод <strong>Mult</strong>, который перемножает два полученных аргумента и возвращает результат.<br />Файл <strong>Key.sn</strong>, который должен находиться рядом с нашим исходником, содержит пару криптографических ключей, которые будут идентифицировать нашу сборку в GAC (Global Assembly Cache - Глобальный кэш сборок). Этот файл можно сгенерировать примерно такой командой:<br /></p><div class="quotebox"><blockquote><p>sn.exe -k Key.sn</p></blockquote></div><p>Откомпилировать наш COM-сервер можно примерно такой командой:<br /></p><div class="quotebox"><blockquote><p>&quot;C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\vbc.exe&quot; &quot;c:\temp\test.vb&quot; /out:&quot;c:\temp\test.dll&quot; /target:library</p></blockquote></div><p>После этого зарегистрировать наш COM-сервер можно примерно такой командой:<br /></p><div class="quotebox"><blockquote><p>C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727&gt;regasm c:\temp\test.dll</p></blockquote></div><p>И наконец, поместить наш COM-сервер в GAC (Global Assembly Cache) можно примерно такой командой:<br /></p><div class="quotebox"><blockquote><p>gacutil /i c:\temp\test.dll</p></blockquote></div><p>После всего этого будет работать такой код на VBScript:<br /></p><div class="codebox"><pre><code>Set objTest = CreateObject(&quot;TestComponentLib.TestComponent&quot;)
WScript.Echo objTest.About
WScript.Echo objTest.Mult(3, 4)</code></pre></div><p>Как видно, написать COM-сервер на VB.NET не просто, а очень просто <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" />. И вполне возможно обойтись для этого только стандартной установкой .NET Framework, парочкой бесплатных консольных утилит, не требующих установки (<strong>sn.exe</strong> и <strong>gacutil.exe</strong> находятся во вложении этого поста) и любым текстовым редактором.</p>]]></content>
			<author>
				<name><![CDATA[The gray Cardinal]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=2</uri>
			</author>
			<updated>2008-02-17T08:17:55Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=8989#p8989</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBScript: используем классы .NET]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=8965#p8965" />
			<content type="html"><![CDATA[<p>Решения, приведённые в данной ветке, являются скорее идеями, чем законченными решениями. Что, однако, не делает их менее интересными.</p>]]></content>
			<author>
				<name><![CDATA[The gray Cardinal]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=2</uri>
			</author>
			<updated>2008-02-15T15:01:01Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=8965#p8965</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBScript: используем классы .NET]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=8964#p8964" />
			<content type="html"><![CDATA[<p>Ещё одно решение от <strong>Gepard</strong>. Исполнение .NET кода на лету.<br />Сборка .NET, регистрируется как COM-объект, точно так же, как и предыдущая.<br />Пример исполнения кода C# на VBScript:<br /></p><div class="codebox"><pre><code>Set gl = CreateObject(&quot;Gepard.Loader&quot;)
gl.SetAdditionalAssemblysCount 2 
gl.SetAdditionalAssembly &quot;System.dll&quot;
gl.SetAdditionalAssembly &quot;System.Windows.Forms.dll&quot;
strForBuild = vbCrLF
strForBuild = strForBuild &amp; &quot;using System.Windows.Forms;&quot; &amp; vbCrLF
strForBuild = strForBuild &amp; &quot;namespace ClassLibrary1&quot; &amp; vbCrLF
strForBuild = strForBuild &amp; &quot;{&quot; &amp; vbCrLF
strForBuild = strForBuild &amp; &quot;public class Class1&quot; &amp; vbCrLF
strForBuild = strForBuild &amp; &quot;{&quot; &amp; vbCrLF
strForBuild = strForBuild &amp; &quot;public void ShowMessage(string Message)&quot; &amp; vbCrLF
strForBuild = strForBuild &amp; &quot;{&quot; &amp; vbCrLF
strForBuild = strForBuild &amp; &quot;MessageBox.Show(Message);&quot; &amp; vbCrLF
strForBuild = strForBuild &amp; &quot;}&quot; &amp; vbCrLF
strForBuild = strForBuild &amp; &quot;}&quot; &amp; vbCrLF
strForBuild = strForBuild &amp; &quot;}&quot; &amp; vbCrLF
If gl.Build(strForBuild) Then
    Set newObj = gl.GetObject(&quot;ClassLibrary1.Class1&quot;)
    newObj.ShowMessage &quot;Тестовое сообщение&quot;
Else
    WScript.Echo &quot;Ошибка компиляции!&quot;
End If</code></pre></div><p>Замечания:<br />1. Метод Build для одного и того же модуля надо делать один раз (GetObject - сколько угодно), т.к. если компилировать одну и ту же сборку для каждого нового объекта, можно очень быстро забить память.<br />2. Возможность компиляции кода на VB.NET (метод BuildVB).<br /></p><div class="codebox"><pre><code>Set gl = CreateObject(&quot;Gepard.Loader&quot;)
gl.SetAdditionalAssemblysCount 1 
gl.SetAdditionalAssembly &quot;System.Windows.Forms.dll&quot;
strForBuild = vbCrLF
strForBuild = strForBuild &amp; &quot;Imports System.Windows.Forms&quot; &amp; vbCrLF
strForBuild = strForBuild &amp; &quot;Public class Class1&quot; &amp; vbCrLF
strForBuild = strForBuild &amp; &quot;Public Sub ShowMessage(Message As String)&quot; &amp; vbCrLF
strForBuild = strForBuild &amp; &quot;MessageBox.Show(Message)&quot; &amp; vbCrLF
strForBuild = strForBuild &amp; &quot;End Sub&quot; &amp; vbCrLF
strForBuild = strForBuild &amp; &quot;End Class&quot; &amp; vbCrLF
If gl.BuildVB(strForBuild) Then
    Set newObj = gl.GetObject(&quot;Class1&quot;)
    newObj.ShowMessage &quot;Привет, BuildVB!&quot;
Else
    WScript.Echo &quot;Ошибка компиляции!&quot;
End If</code></pre></div><p>В архивах - исходник и готовая библиотека (loader.dll).</p>]]></content>
			<author>
				<name><![CDATA[The gray Cardinal]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=2</uri>
			</author>
			<updated>2008-02-15T14:27:04Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=8964#p8964</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBScript: используем классы .NET]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=8932#p8932" />
			<content type="html"><![CDATA[<p>По мотивам статьи <a href="http://www.script-coding.com/DotNet/CmdLineCompiler.html">Использование консольного компилятора .NET Framework для создания приложений</a>. Следующий reg-файл добавляет в контекстное меню .vb-файлов четыре различных команды компиляции и запуска. Это позволит писать небольшие программы на VB.NET почти с теми же удобствами, что и обычные скрипты WSH.<br /></p><div class="codebox"><pre><code>Windows Registry Editor Version 5.00 

[HKEY_CLASSES_ROOT\.VB] 
@=&quot;vbfile&quot; 

[HKEY_CLASSES_ROOT\vbfile] 

[HKEY_CLASSES_ROOT\vbfile\shell] 

[HKEY_CLASSES_ROOT\vbfile\shell\open] 
@=&quot;Открыть в SciTE&quot; 

[HKEY_CLASSES_ROOT\vbfile\shell\open\command] 
@=&quot;\&quot;C:\\Program Files\\SciTE\\SciTE.exe\&quot; \&quot;%1\&quot;&quot; 

[HKEY_CLASSES_ROOT\vbfile\shell\open1] 
@=&quot;Скомпилировать .NET (консоль)&quot; 

[HKEY_CLASSES_ROOT\vbfile\shell\open1\command] 
@=&quot;cmd /k \&quot;\&quot;C:\\WINDOWS\\Microsoft.NET\\Framework\\v2.0.50727\\vbc.exe\&quot; \&quot;%1\&quot; /out:\&quot;%1.exe\&quot;\&quot;&quot; 

[HKEY_CLASSES_ROOT\vbfile\shell\open2] 
@=&quot;Скомпилировать и запустить .NET (консоль)&quot; 

[HKEY_CLASSES_ROOT\vbfile\shell\open2\command] 
@=&quot;cmd /k \&quot;\&quot;C:\\WINDOWS\\Microsoft.NET\\Framework\\v2.0.50727\\vbc.exe\&quot; \&quot;%1\&quot; /out:\&quot;%1.exe\&quot; &amp;&amp; \&quot;%1.exe\&quot;\&quot;&quot; 

[HKEY_CLASSES_ROOT\vbfile\shell\open3] 
@=&quot;Скомпилировать .NET (win)&quot; 

[HKEY_CLASSES_ROOT\vbfile\shell\open3\command] 
@=&quot;cmd /k \&quot;\&quot;C:\\WINDOWS\\Microsoft.NET\\Framework\\v2.0.50727\\vbc.exe\&quot; \&quot;%1\&quot; /out:\&quot;%1.exe\&quot; /target:winexe\&quot;&quot; 

[HKEY_CLASSES_ROOT\vbfile\shell\open4] 
@=&quot;Скомпилировать и запустить .NET (win)&quot; 

[HKEY_CLASSES_ROOT\vbfile\shell\open4\command] 
@=&quot;cmd /k \&quot;\&quot;C:\\WINDOWS\\Microsoft.NET\\Framework\\v2.0.50727\\vbc.exe\&quot; \&quot;%1\&quot; /out:\&quot;%1.exe\&quot; /target:winexe &amp;&amp; \&quot;%1.exe\&quot;\&quot;&quot;</code></pre></div><p>Пример использования. Создайте текстовый файл с расширением .vb с таким кодом:<br /></p><div class="codebox"><pre><code>Imports System.Windows.Forms 
Public Class WinForm 
   Inherits System.Windows.Forms.Form 
   Private b As New Button() 
   Public Sub New() 
       MyBase.New() 
       MyBase.Topmost = True 
       MyBase.Text = &quot;Кнопка с текущим временем&quot; 
       b.Dock = DockStyle.Fill 
       b.Text = Now() 
       AddHandler b.Click, AddressOf b_Click 
       MyBase.Controls.Add(b) 
       MyBase.Show() 
   End Sub 
   Public Sub b_Click(ByVal sender As Object, ByVal e As EventArgs) 
       b.Text = Now() 
   End Sub 
   Public Shared Sub Main() 
       System.Windows.Forms.Application.Run(New WinForm()) 
   End Sub 
End Class</code></pre></div><p>Откройте контекстное меню Проводника на этом vb-файле, и вы сможете почти мгновенно скомпилировать и запустить его четырьмя способами.</p>]]></content>
			<author>
				<name><![CDATA[The gray Cardinal]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=2</uri>
			</author>
			<updated>2008-02-14T20:10:36Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=8932#p8932</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBScript: используем классы .NET]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=8931#p8931" />
			<content type="html"><![CDATA[<p>Ещё пример к решению в предыдущем посте. Скрипт опять сохранит страничку &quot;http://script-coding.com/&quot; в файл &quot;c:\temp\script-coding.htm&quot;, но уже в случае, если вы находитесь за прокси, требующем авторизации. Этот пример демострирует методы <strong>SetParameterCount</strong>, <strong>SetParameterValue</strong> и <strong>GetObjectP</strong>, которые позволяют работать с объектами, конструкторы которых требуют параметров.<br /></p><div class="codebox"><pre><code>Set OF = CreateObject(&quot;ObjectFerm&quot;)
Set web = OF.GetObject(&quot;C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.dll&quot;, &quot;System.Net.WebClient&quot;)
OF.SetParameterCount 2
OF.SetParameterValue 0, &quot;proxy.mydomain.ru&quot; &#039; IP прокси 
OF.SetParameterValue 1, 8080 &#039; порт прокси 
Set prx = OF.GetObjectP(&quot;C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.dll&quot;, &quot;System.Net.WebProxy&quot;)
OF.SetParameterCount 2
OF.SetParameterValue 0, &quot;v.pupkin&quot; &#039; login
OF.SetParameterValue 1, &quot;pass&quot; &#039; pass
Set crc = OF.GetObjectP(&quot;C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.dll&quot;, &quot;System.Net.NetworkCredential&quot;)
web.Proxy = prx
web.Proxy.Credentials = crc
web.DownloadFile &quot;http://script-coding.com/&quot;, &quot;c:\temp\myfile.htm&quot;</code></pre></div><p>Есть проблема: объекты, возвращаемые функцией <strong>GetObjectP</strong>, не совсем корректно работают. Обращение через точку к свойствам объектов, возвращённых <strong>GetObjectP</strong>, приводит к ошибке &quot;требуется объект&quot; (с объектами, возвращёнными <strong>GetObject</strong>, этого не происходит). При этом функция TypeName() для первых всегда возвращает &quot;Object&quot;, а для вторых - возвращает имя класса. Например, строка<br /></p><div class="codebox"><pre><code>prx.Credentials = crc</code></pre></div><p>работать не будет, но работают, как ни странно, такие строки:<br /></p><div class="codebox"><pre><code>web.Proxy = prx
web.Proxy.Credentials = crc</code></pre></div>]]></content>
			<author>
				<name><![CDATA[The gray Cardinal]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=2</uri>
			</author>
			<updated>2008-02-14T19:59:17Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=8931#p8931</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBScript: используем классы .NET]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=8896#p8896" />
			<content type="html"><![CDATA[<p>Решение от <strong>Gepard</strong> (г. Ставрополь), cборка .NET. Сайт <a href="http://forum.d01-soft.ru/">http://forum.d01-soft.ru/</a>.<br />Подключение объектов из произвольных сборок .NET.<br />Зарегистрируйте подобной командой:<br /></p><div class="quotebox"><blockquote><p>C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727&gt;RegAsm&nbsp; c:\temp\ObjectFerm.dll</p></blockquote></div><p>Затем поместите сборку в кэш сборок подобной командой:<br /></p><div class="quotebox"><blockquote><p>C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin&gt;gacutil /i c:\temp\ObjectFerm.dll</p></blockquote></div><p>Пример использования:<br /></p><div class="codebox"><pre><code>Set OF = CreateObject(&quot;ObjectFerm&quot;)
Set web = OF.GetObject(&quot;C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.dll&quot;, &quot;System.Net.WebClient&quot;)
web.DownloadFile &quot;http://script-coding.com/&quot;, &quot;c:\temp\myfile.htm&quot;</code></pre></div><p>В архиве готовая библиотека, исходник, командный файл регистрации, утилита gacutil, примеры.</p>]]></content>
			<author>
				<name><![CDATA[The gray Cardinal]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=2</uri>
			</author>
			<updated>2008-02-13T19:59:19Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=8896#p8896</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[VBScript: используем классы .NET]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=8766#p8766" />
			<content type="html"><![CDATA[<p>Классы .NET могут быть спрограммированы таким образом, что они будут доступны как COM-объекты, надо только их зарегистрировать специальной утилитой. Многие стандартные классы .NET Framework поддерживают такую возможность. Например, командная строка регистрации:<br /></p><div class="quotebox"><blockquote><p>C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727&gt;regasm System.dll</p></blockquote></div><p>После этого на VBScript будет работать, например, такой код:<br /></p><div class="codebox"><pre><code>Set web = CreateObject(&quot;System.Net.WebClient&quot;)
web.DownloadFile &quot;http://script-coding.com/&quot;, &quot;c:\temp\script-coding.htm&quot;</code></pre></div><p>Этот скрипт сохранит страничку &quot;http://script-coding.com/&quot; в файл &quot;c:\temp\script-coding.htm&quot;.</p>]]></content>
			<author>
				<name><![CDATA[The gray Cardinal]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=2</uri>
			</author>
			<updated>2008-02-10T12:22:30Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=8766#p8766</id>
		</entry>
</feed>
