<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; Извлечение tlb из OCX и DLL файлов]]></title>
		<link>http://forum.script-coding.com/viewtopic.php?id=5413</link>
		<atom:link href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=5413&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «Извлечение tlb из OCX и DLL файлов».]]></description>
		<lastBuildDate>Fri, 28 Jan 2011 12:33:01 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: Извлечение tlb из OCX и DLL файлов]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=44487#p44487</link>
			<description><![CDATA[<p><a href="http://narod.ru/disk/4508609001/EventProxy.zip.html">http://narod.ru/disk/4508609001/EventProxy.zip.html</a></p><p>Код написан для 1с 7.7, выкладываю его &quot;как есть&quot;, чтобы случайно что-то нужное не удалить.<br />Думаю, что не проблема будет разобраться что к чему.</p><p>Что он делает - подключает события com-объектов к 1С. В процедуру &quot;Источник&quot; приезжает IDispatch объекта, у него я запрашиваю IProvideClassInfo, а через него получаю ITypeInfo - и уже потом работаю с ним.</p>]]></description>
			<author><![CDATA[null@example.com (chessman)]]></author>
			<pubDate>Fri, 28 Jan 2011 12:33:01 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=44487#p44487</guid>
		</item>
		<item>
			<title><![CDATA[Re: Извлечение tlb из OCX и DLL файлов]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=44472#p44472</link>
			<description><![CDATA[<p><strong>chessman</strong>, в этом разделе — никак. Куда-нибудь на файлообменник, сюда — ссылку.</p>]]></description>
			<author><![CDATA[null@example.com (alexii)]]></author>
			<pubDate>Fri, 28 Jan 2011 08:20:11 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=44472#p44472</guid>
		</item>
		<item>
			<title><![CDATA[Re: Извлечение tlb из OCX и DLL файлов]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=44470#p44470</link>
			<description><![CDATA[<p>Упс...а как тут файл прикрепить, а то код дюже большой?</p>]]></description>
			<author><![CDATA[null@example.com (chessman)]]></author>
			<pubDate>Fri, 28 Jan 2011 06:33:33 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=44470#p44470</guid>
		</item>
		<item>
			<title><![CDATA[Re: Извлечение tlb из OCX и DLL файлов]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=44453#p44453</link>
			<description><![CDATA[<div class="quotebox"><cite>chessman пишет:</cite><blockquote><p>Я все сделал на vbs&#039;е + DynamicWrapperX.&nbsp; У меня цель была подключиться из 1С к событиям com-объекта.<br />Если интересно, могу выложить код.</p></blockquote></div><p>Конечно интересно, выкладывай. <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /><br />&nbsp; Я думаю будет не лишним в решении задачи.</p>]]></description>
			<author><![CDATA[null@example.com (Аскет)]]></author>
			<pubDate>Thu, 27 Jan 2011 15:49:18 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=44453#p44453</guid>
		</item>
		<item>
			<title><![CDATA[Re: Извлечение tlb из OCX и DLL файлов]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=44452#p44452</link>
			<description><![CDATA[<p><strong>alexii</strong>, спасибо. Полезная информация. Библиотека имеется, буду разбираться.</p><div class="quotebox"><cite>chessman пишет:</cite><blockquote><p><strong>Аскет</strong>, у тебя конечная цель какая?</p></blockquote></div><p>Автоматизированное создание документации по COM-объектам.</p>]]></description>
			<author><![CDATA[null@example.com (Аскет)]]></author>
			<pubDate>Thu, 27 Jan 2011 15:42:20 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=44452#p44452</guid>
		</item>
		<item>
			<title><![CDATA[Re: Извлечение tlb из OCX и DLL файлов]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=44443#p44443</link>
			<description><![CDATA[<p>Я все сделал на vbs&#039;е + DynamicWrapperX.&nbsp; У меня цель была подключиться из 1С к событиям com-объекта.<br />Если интересно, могу выложить код.</p><p>По теме - главное, что тебе нужно получить, это интерфейс ITypeLib. Это как раз возвращает LoadTypeLib, вот ее описание:</p><div class="codebox"><pre><code>HRESULT LoadTypeLib(  
  const OLECHAR FAR  *szFile,       
  ITypeLib FAR* FAR  *pptlib  
);</code></pre></div><p>Если ITypeLib получен, через него получаешь общее кол-во типов из библиотеке типов и перебираешь их в цикле, получая интерфейс ITypeInfo - </p><div class="codebox"><pre><code>ITypeLib::GetTypeInfo</code></pre></div><p>.<br />Все остальное получаешь через ITypeInfo, в том числе и </p><div class="codebox"><pre><code>ITypeInfo::GetFuncDesc</code></pre></div><p><strong>Аскет</strong>, у тебя конечная цель какая?</p>]]></description>
			<author><![CDATA[null@example.com (chessman)]]></author>
			<pubDate>Thu, 27 Jan 2011 06:55:04 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=44443#p44443</guid>
		</item>
		<item>
			<title><![CDATA[Re: Извлечение tlb из OCX и DLL файлов]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=44438#p44438</link>
			<description><![CDATA[<p>В скриптах единственное, что можно сделать — использовать библиотеку «TLBINF32.DLL» (поставлялась в комплекте с Visual Studio и некоторыми другими продуктами). Я, например, взял библиотеку из Microsoft Office 2000 Disk 1 («.\System\tlbinf32.dll»), скопировал в «%SystemRoot%\System32», зарегистрировал:<br /></p><div class="codebox"><pre><code>regsvr32.exe &quot;%SystemRoot%\System32\tlbinf32.dll&quot;</code></pre></div><p>и пользовался. Документацию к ней можно взять здесь: <a href="http://support.microsoft.com/kb/224331/en-us">FILE: Tlbinf32.exe: Справка для Tlbinf32.dll файлов</a>.</p><p>Библиотека реализует доступ к Type Library посредством объекта «Tli.TliApplication». Вот Вам простой пример получения списка и регистрации в глобальном пространстве констант из объектов:<br /></p><div class="codebox"><pre><code>Option Explicit

Dim objFSO
Dim objWshShell
Dim objWord
Dim objExcel

Dim objDictionary

Dim strValue

Set objFSO            = WScript.CreateObject(&quot;Scripting.FileSystemObject&quot;)
Set objWshShell        = WScript.CreateObject(&quot;WScript.Shell&quot;)
Set objWord            = WScript.CreateObject(&quot;Word.Application&quot;)
Set objExcel        = WScript.CreateObject(&quot;Excel.Application&quot;)

Set objDictionary    = WScript.CreateObject(&quot;Scripting.Dictionary&quot;)
objDictionary.CompareMode = vbTextCompare

DefineConstants objDictionary, objFSO, True
DefineConstants objDictionary, objWshShell, True
DefineConstants objDictionary, objWord, True
DefineConstants objDictionary, objExcel, True

&#039; Здесь, собственно, само тело скрипта — для чего всё и было затеяно.
&#039; А мы, в качестве демонстрации, просто выведем значения некоторых констант

With WScript
    .Echo
    .Echo &quot;Example of constants&quot;
    .Echo &quot;================================&quot;
    .Echo &quot;ForReading =&quot;, ForReading
    .Echo &quot;ForWriting =&quot;, ForWriting
    .Echo &quot;ForAppending =&quot;, ForAppending
    .Echo
    .Echo &quot;wdNewBlankDocument =&quot;, wdNewBlankDocument
    .Echo &quot;wdNewWebPage =&quot;, wdNewWebPage
    .Echo
    .Echo &quot;xlAscending =&quot;, xlAscending
    .Echo &quot;xlDescending =&quot;, xlDescending
    .Echo &quot;================================&quot;
End With

objExcel.Quit
objWord.Quit

Set objExcel = Nothing
Set objWord = Nothing
Set objWshShell = Nothing
Set objFSO = Nothing

WScript.Quit 0

&#039; ================================================================================
Sub DefineConstants(ByRef objDictionary, objObject, blnDebug)
    Dim objTliApplication
    Dim objInterfaceInfo
    Dim objTypeLibrary
    Dim objConstants
    Dim objConstant
    
    Dim strTypeLib

    Set objTliApplication = WScript.CreateObject(&quot;Tli.TliApplication&quot;)
    Set objInterfaceInfo = objTliApplication.InterfaceInfoFromObject(objObject)
    Set objTypeLibrary = objInterfaceInfo.Parent
    
    strTypeLib = &quot;&quot; &amp; vbNewLine &amp; _
        &quot;&#039; ==== Type Library ===========================&quot; &amp; vbNewLine &amp; _
        &quot;&#039; &quot; &amp; &quot;Name:        &quot; &amp; objTypeLibrary.Name &amp; vbNewLine &amp; _
        &quot;&#039; &quot; &amp; &quot;Description: &quot; &amp; objTypeLibrary.HelpString &amp; vbNewLine &amp; _
        &quot;&#039; &quot; &amp; &quot;GUID:        &quot; &amp; objTypeLibrary.GUID &amp; vbNewLine &amp; _
        &quot;&#039; &quot; &amp; &quot;Library:     &quot; &amp; LCase(objTypeLibrary.ContainingFile) &amp; vbNewLine &amp; _
        &quot;&#039; &quot; &amp; &quot;Version:     &quot; &amp; objTypeLibrary.MajorVersion &amp; &quot;.&quot; &amp; objTypeLibrary.MinorVersion &amp; vbNewLine &amp; _
        &quot;&#039; =============================================&quot; &amp; vbNewLine &amp; _
        &quot;&quot; &amp; vbNewLine
    
    For Each objConstants In objTypeLibrary.Constants
        If Left(objConstants.Name, 1) &lt;&gt; &quot;_&quot; Then
            strTypeLib = strTypeLib &amp; &quot;&#039; ---------------------------------------------&quot; &amp; vbNewLine
            strTypeLib = strTypeLib &amp; &quot;&#039; &quot; &amp; objConstants.Name &amp; vbNewLine
            strTypeLib = strTypeLib &amp; &quot;&#039; ---------------------------------------------&quot; &amp; vbNewLine
            
            For Each objConstant In objConstants.Members
                If Left(objConstant.Name, 1) &lt;&gt; &quot;_&quot; Then
                    If objDictionary.Exists(objConstant.Name) Then
                        If objDictionary.Item(objConstant.Name) = objConstant.Value Then
                            If blnDebug Then
                                strTypeLib = strTypeLib &amp; &quot;&#039; Next constant is duplicate, mark comments&quot; &amp; vbNewLine &amp; _
                                &quot;&#039; Const &quot; &amp; objConstant.Name &amp; &quot; = &quot; &amp; objConstant.Value &amp; vbNewLine
                            End If
                        Else
                            Err.Raise 1041, &quot;Constant [&quot; &amp; objConstant.Name &amp; &quot;] is duplicate with other &quot; &amp; _
                                &quot;and constant&#039;s value [&quot; &amp; objConstant.Value &amp; &quot;] is different then other [&quot; &amp; objDictionary.Item(objConstant.Name) &amp; &quot;].&quot;
                        End If
                    Else
                        objDictionary.Add objConstant.Name, objConstant.Value
                        strTypeLib = strTypeLib &amp; &quot;Const &quot; &amp; objConstant.Name &amp; &quot; = &quot; &amp; objConstant.Value &amp; vbNewLine
                    End If
                End If
            Next
        End If
    Next
    
    &#039; Раскомментируйте следующую строку, чтобы увидеть список констант
    &#039; При этом желательно работать с консольной версией движка, :)
    &#039; WScript.Echo strTypeLib
    
    ExecuteGlobal strTypeLib

    Set objConstant = Nothing
    Set objTypeLibrary = Nothing
    Set objInterfaceInfo = Nothing
    Set objTliApplication = Nothing
End Sub
&#039; ================================================================================</code></pre></div><p>Кроме метода «.InterfaceInfoFromObject()» есть и «.TypeLibInfoFromFile()», и «.TypeLibInfoFromRegistry()».</p>]]></description>
			<author><![CDATA[null@example.com (alexii)]]></author>
			<pubDate>Wed, 26 Jan 2011 19:37:32 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=44438#p44438</guid>
		</item>
		<item>
			<title><![CDATA[Re: Извлечение tlb из OCX и DLL файлов]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=44436#p44436</link>
			<description><![CDATA[<div class="quotebox"><cite>chessman пишет:</cite><blockquote><p>LoadTypeLib не поможет?</p></blockquote></div><p>А можно поподробнее, что за <strong>LoadTypeLib</strong>?</p><p>----------------------------<br />Собственно &quot;расковырять&quot; контрол и достать из ресурсов эту самую tlb <span class="bbu">в бинарном формате</span> труда не составляет. Но это совсем не то.</p><p>Вот что я понял:<br />TLB писан на языке IDL и описывает возможности ActiveX.<br />TLB содержит некую таблицу смещений именованных процедур. Т.е. (с низкоуровневой точки зрения) при обращении к контролу по имени функции, эта таблица перенаправляет на соответствующий физический адрес (смещение).</p><p>Насколько я теперь осведомлён, вся &quot;магия&quot; реализуется через интерфейсы <strong>IUnknown</strong> и, если имеется - <strong>IDispatch</strong>.<br /> И копать надо именно туда.</p><p>Далее идут интерфейсы <strong>ITypeLib</strong> и&nbsp; <strong>ITypeInfo</strong>. Информации о них и работе с ними нашёл мало.</p><p>Ну и конечный пункт </p><div class="quotebox"><blockquote><p><strong>ITypeInfo.GetFuncDesc</strong><em>(unsigned int index, FUNCDESC FAR* FAR* ppFuncDesc)</em>;</p></blockquote></div>]]></description>
			<author><![CDATA[null@example.com (Аскет)]]></author>
			<pubDate>Wed, 26 Jan 2011 17:43:57 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=44436#p44436</guid>
		</item>
		<item>
			<title><![CDATA[Re: Извлечение tlb из OCX и DLL файлов]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=44423#p44423</link>
			<description><![CDATA[<p>LoadTypeLib не поможет?</p>]]></description>
			<author><![CDATA[null@example.com (chessman)]]></author>
			<pubDate>Wed, 26 Jan 2011 13:45:37 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=44423#p44423</guid>
		</item>
		<item>
			<title><![CDATA[Re: Извлечение tlb из OCX и DLL файлов]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=44355#p44355</link>
			<description><![CDATA[<p>..Или <strong>IDL</strong>, а не TLB. </p><p>В общем суть - Получение списка <strong>свойств</strong>, <strong>методов</strong> и <strong>событий</strong> (а также интерфейсов, констант, и т.д) из ActiveX-контролов.</p><p>Это реализовано в: объектных браузерах, средах программирования и некоторых редакторах.<br />Но &quot;Как?&quot; это осуществляется я лишь догадываюсь...</p>]]></description>
			<author><![CDATA[null@example.com (Аскет)]]></author>
			<pubDate>Sun, 23 Jan 2011 14:38:42 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=44355#p44355</guid>
		</item>
		<item>
			<title><![CDATA[Извлечение tlb из OCX и DLL файлов]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=44309#p44309</link>
			<description><![CDATA[<p>Интересует всё что связанно с TLB: методы по извлечению, непосредственное чтение из библиотеки &quot;на лету&quot;, и т.д.</p>]]></description>
			<author><![CDATA[null@example.com (Аскет)]]></author>
			<pubDate>Sat, 22 Jan 2011 23:55:38 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=44309#p44309</guid>
		</item>
	</channel>
</rss>
