Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / При переводе с VBScript на JavaScript цикл не работает( / 19 сообщений из 19, страница 1 из 1
30.08.2012, 17:57
    #37937656
maksim32
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
При переводе с VBScript на JavaScript цикл не работает(
Есть у меня программа на VBS, которую я хотел перевести на JavaScript. Вот она:

sFileName = "C:\TLBINF32.DLL"
Set oTypeLib = CreateObject("TLI.TypeLibInfo")
If IsObject(oTypeLib) Then
oTypeLib.ContainingFile = sFileName
WScript.Echo "TLB Name:" & vbTab & oTypeLib.Name
WScript.Echo "TLB GUID:" & vbTab & oTypeLib.GUID
WScript.Echo "TLB LCID:" & vbTab & oTypeLib.LCID
WScript.Echo "TLB Ver.:" & vbTab & oTypeLib.MajorVersion & "." & oTypeLib.MinorVersion
WScript.Echo vbCRLF & "CoClasses of Library:"
WScript.Echo "---------"

For Each oTypeLibInfo In oTypeLib.CoClasses
WScript.Echo oTypeLibInfo.GUID & " : " & oTypeLibInfo.Name
Next
End If


Перевел я ее и цикл for each..next заменил на for in object:

sFileName="C:\TLBINF32.DLL";
var oTypeLib=new ActiveXObject("TLI.TypeLibInfo");
oTypeLib.ContainingFile=sFileName;
etxt= "TLB Name:"+"\t"+oTypeLib.Name+"\n";
etxt+="TLB GUID:"+"\t"+oTypeLib.GUID+"\n";
etxt+="TLB LCID:"+"\t"+oTypeLib.LCID+"\n";
etxt+="TLB Ver.:"+"\t"+oTypeLib.MajorVersion+"."+oTypeLib.MinorVersion+"\n";
etxt+="\nCoClasses of Library:\n---------\n";
for(var otli in oTypeLib.CoClasses){etxt+=otli.GUID+" : "+otli.Name+"\n"};
WScript.Echo(etxt);

Но теперь он не работает, помогите исправить!
...
Рейтинг: 0 / 0
30.08.2012, 18:49
    #37937747
maksim32
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
При переводе с VBScript на JavaScript цикл не работает(
Поясню, в TLBINF32.DLL функции для работы с dll файлами: может tbl извлекать и работать с ними. Эта программа должна выдать список всех функций в C:\\TLBINF32.DLL; объект TLI.TypeLibInfo находится в этой же dll, которая предварительно зарегистрирована. Вот еще архив с этой dll.
В первом случае выдавала 3 функции, во втором, который я делал, ни одной... Я подозреваю, что что-то неверно у меня с циклом.
...
Рейтинг: 0 / 0
31.08.2012, 09:48
    #37938213
Програмёр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
При переводе с VBScript на JavaScript цикл не работает(
maksim32Есть у меня программа на VBS, которую я хотел перевести на JavaScript. Вот она:

sFileName = "C:\TLBINF32.DLL"
Set oTypeLib = CreateObject("TLI.TypeLibInfo")
If IsObject(oTypeLib) Then
oTypeLib.ContainingFile = sFileName
WScript.Echo "TLB Name:" & vbTab & oTypeLib.Name
WScript.Echo "TLB GUID:" & vbTab & oTypeLib.GUID
WScript.Echo "TLB LCID:" & vbTab & oTypeLib.LCID
WScript.Echo "TLB Ver.:" & vbTab & oTypeLib.MajorVersion & "." & oTypeLib.MinorVersion
WScript.Echo vbCRLF & "CoClasses of Library:"
WScript.Echo "---------"

For Each oTypeLibInfo In oTypeLib.CoClasses
WScript.Echo oTypeLibInfo.GUID & " : " & oTypeLibInfo.Name
Next
End If


Перевел я ее и цикл for each..next заменил на for in object:

sFileName="C:\TLBINF32.DLL";
var oTypeLib=new ActiveXObject("TLI.TypeLibInfo");
oTypeLib.ContainingFile=sFileName;
etxt= "TLB Name:"+"\t"+oTypeLib.Name+"\n";
etxt+="TLB GUID:"+"\t"+oTypeLib.GUID+"\n";
etxt+="TLB LCID:"+"\t"+oTypeLib.LCID+"\n";
etxt+="TLB Ver.:"+"\t"+oTypeLib.MajorVersion+"."+oTypeLib.MinorVersion+"\n";
etxt+="\nCoClasses of Library:\n---------\n";
for(var otli in oTypeLib.CoClasses){etxt+=otli.GUID+" : "+otli.Name+"\n"};
WScript.Echo(etxt);

Но теперь он не работает, помогите исправить!

исли правильно понимаю, For Each в VBScript работаит аналогично foreach в пхп... то есть в перемнной oTypeLibInfo Вы получаете объект (ну то есть значение), так вот, а в for(var otli in oTypeLib.CoClasses) в javascript otli - это ключ массива, то есть надо писать
Код: javascript
1.
for(var otli in oTypeLib.CoClasses){etxt+=oTypeLib.CoClasses[otli].GUID+" : "+oTypeLib.CoClasses[otli].Name+"\n"};
...
Рейтинг: 0 / 0
31.08.2012, 10:15
    #37938260
VSVLAD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
При переводе с VBScript на JavaScript цикл не работает(
Как помнится, ещё раньше вместо цикла For Each - в JS использовали перечислитель, типо псевдокода:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
var otli = oTypeLib.CoClasses
otli.reset

while !(otli.next )
{

    otli.next();
}
...
Рейтинг: 0 / 0
31.08.2012, 10:18
    #37938266
VSVLAD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
При переводе с VBScript на JavaScript цикл не работает(
Почитайте тут для старта:
JScript: Функция, имитирующая цикл For Each в VBScript

По коллекциям JScript использует энумератор, а по обычным массивам справляется через for each свой
...
Рейтинг: 0 / 0
31.08.2012, 14:55
    #37938895
maksim32
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
При переводе с VBScript на JavaScript цикл не работает(
VSVLAD, спасибо большое, но только в коде появляется вот это: "new Enumerator(oTypeLib.CoClasses)" в любом виде сразу получается системная ошибка приложения как в mshta.exe, и как в WScript.exe: Инструкция по адресу "0x247fca44" обратилась к памяти по адресу "0x0000001c". Память не может быть "written".
...
Рейтинг: 0 / 0
31.08.2012, 15:00
    #37938907
maksim32
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
При переводе с VBScript на JavaScript цикл не работает(
Програмёр, Ваш способ не подходит, к тому же цикл все равно ни разу не запускается.

С критическими системными ошибками из-за кода, который я когда-либо писал, никогда не встречался, обычно обработчик ошибок указывает на ошибку..
...
Рейтинг: 0 / 0
31.08.2012, 15:29
    #37938963
maksim32
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
При переводе с VBScript на JavaScript цикл не работает(
В vbs версии программа мне выдает 3 функции SearchHelper, TypeLibInfo, TLIApplication:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
C:\>cscript //NoLogo 8.vbs
TLB Name:       TLI
TLB GUID:       {8B217740-717D-11CE-AB5B-D41203C10000}
TLB LCID:       0
TLB Ver.:       1.0
 
CoClasses of Library:
---------
{8B217752-717D-11CE-AB5B-D41203C10000} : SearchHelper
{8B217746-717D-11CE-AB5B-D41203C10000} : TypeLibInfo
{8B21775E-717D-11CE-AB5B-D41203C10000} : TLIApplication
Для продолжения нажмите любую клавишу . . .

А вот в моей ни одной.. Значит она не находит в oTypeLib.CoClasses ни одного значения для otli. Надо как-то поиск этих значений сделать, чтоли.. Способом VSVLSD 'a у меня получилось:
Код: plaintext
1.
var otli=new Enumerator(oTypeLib.CoClasses);
for(;!otli.atEnd();otli.moveNext()){alert(otli.Guid)}
но тут, как я уже писал - системная ошибка возникает.. Даже при использовании той функции "function ForEachItem(Items, Do)"
...
Рейтинг: 0 / 0
31.08.2012, 16:38
    #37939112
VSVLAD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
При переводе с VBScript на JavaScript цикл не работает(
maksim32,

А не так разве?
Код: javascript
1.
2.
var otli=new Enumerator(oTypeLib.CoClasses);
for(;!otli.atEnd();otli.moveNext()){alert(otli.item.Guid)}
...
Рейтинг: 0 / 0
31.08.2012, 17:04
    #37939153
maksim32
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
При переводе с VBScript на JavaScript цикл не работает(
VSVLAD, даже если так, ошибка в "new Enumerator(oTypeLib.CoClasses);", до второй строчки не доходит(
...
Рейтинг: 0 / 0
02.09.2012, 09:39
    #37940270
maksim32
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
При переводе с VBScript на JavaScript цикл не работает(
Хотел воспользоваться справкой к TLBINF32.DLL, но нигде ее не нашел. Если есть у кого или ссылку знаете, дайте кто-нибудь TLBINF32.chm!
...
Рейтинг: 0 / 0
02.09.2012, 16:51
    #37940472
AndreTM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
При переводе с VBScript на JavaScript цикл не работает(
Плохо ищете...Нашлось в первой двадцатке выдачи гугла:
http://www.xlam.ch/download/docs/TlbInf32.chm
...
Рейтинг: 0 / 0
02.09.2012, 17:28
    #37940483
VSVLAD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
При переводе с VBScript на JavaScript цикл не работает(
Вообщем не удалось подружить JS с библиотекой. Но например в отладчике смотрю и вижу:
oTypeLib.CoClasses.Count - верное число объектов в коллекции, но не могу получить к ним доступ. А Enumerator падает как уже смотрели...
...
Рейтинг: 0 / 0
02.09.2012, 21:51
    #37940600
maksim32
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
При переводе с VBScript на JavaScript цикл не работает(
AndreTM, Спасибо большое! Я искал в Яндексе - ни одной ссылки и всего 25 ответов...
...
Рейтинг: 0 / 0
02.09.2012, 21:56
    #37940602
maksim32
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
При переводе с VBScript на JavaScript цикл не работает(
VSVLAD, большое спасибо что уделили внимание и помогли! Я разобрался с циклом: object.item(i) и перечислить все объекты.

sFileName="C:\\TLBINF32.DLL";
var oTypeLib=new ActiveXObject("TLI.TypeLibInfo");
oTypeLib.ContainingFile=sFileName;
var etxt= "TLB Name:"+"\t"+oTypeLib.Name+"\n";
etxt+="TLB GUID:"+"\t"+oTypeLib.GUID+"\n";
etxt+="TLB LCID:"+"\t"+oTypeLib.LCID+"\n";
etxt+="TLB Ver.:"+"\t"+oTypeLib.MajorVersion+"."+oTypeLib.MinorVersion+"\n";
etxt+="\nCoClasses of Library:\n---------\n";
for(i=1;i<=oTypeLib.CoClasses.Count;i++){
otli=oTypeLib.CoClasses.Item(i);
etxt+=otli.Guid+" : "+otli.Name+"\n"};

WScript.Echo(etxt);

Это лучший форум! Хоть где-то помогали..
...
Рейтинг: 0 / 0
02.09.2012, 22:04
    #37940604
maksim32
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
При переводе с VBScript на JavaScript цикл не работает(
" http://www.fpublisher.ru/documentation/javascript_doc/js14.docs%22%5Dhttp://www.fpublisher.ru/documentation/javascript_doc/js14.docs]http://www.fpublisher.ru/documentation/javascript_doc/js14.docs"]http://www.fpublisher.ru/documentation/javascript_doc/js14.docs
...
Рейтинг: 0 / 0
03.09.2012, 10:34
    #37940883
Програмёр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
При переводе с VBScript на JavaScript цикл не работает(
maksim32 Програмёр, Ваш способ не подходит, к тому же цикл все равно ни разу не запускается.

С критическими системными ошибками из-за кода, который я когда-либо писал, никогда не встречался, обычно обработчик ошибок указывает на ошибку..
maksim32 VSVLAD, большое спасибо что уделили внимание и помогли! Я разобрался с циклом: object.item(i) и перечислить все объекты.

sFileName="C:\\TLBINF32.DLL";
var oTypeLib=new ActiveXObject("TLI.TypeLibInfo");
oTypeLib.ContainingFile=sFileName;
var etxt= "TLB Name:"+"\t"+oTypeLib.Name+"\n";
etxt+="TLB GUID:"+"\t"+oTypeLib.GUID+"\n";
etxt+="TLB LCID:"+"\t"+oTypeLib.LCID+"\n";
etxt+="TLB Ver.:"+"\t"+oTypeLib.MajorVersion+"."+oTypeLib.MinorVersion+"\n";
etxt+="\nCoClasses of Library:\n---------\n";
for(i=1;i<=oTypeLib.CoClasses.Count;i++){
otli=oTypeLib.CoClasses.Item(i);
etxt+=otli.Guid+" : "+otli.Name+"\n"};

WScript.Echo(etxt);

в js массив но не объект? Предложеный мной вариант правда не сработал? Если кто знает почему он мог не сработать, напишите пожалуйста. просто впервые с тактм сталкиваюсь. Заранее благодарен.
P.s. Как предположение, могло ли это быть вызвано упущенным hasOwnProperty? Может всё намного проще, и оно просто обращалось к свойствам null или undefined?
Вообщем догадок много, кто знает, подскажите.
...
Рейтинг: 0 / 0
03.09.2012, 12:06
    #37941038
VSVLAD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
При переводе с VBScript на JavaScript цикл не работает(
maksim32oTypeLib.CoClasses.Item(i);

Я предполагаю (JS синтаксис плохо знаю) что это будет вызов свойство/метод Item с параметром "i" - возвратится объект, напротив я же полагал что надо делать так oTypeLib.CoClasses.Item[i] - но это не массив оказывается, также как и oTypeLib.CoClasses[i].
Возможно у JS нет свойств по-умолчанию. В VB вызов функции или обращение к элементу массива используются операнды - скобки. Поэтому и не замечал такого, что "не работало"
...
Рейтинг: 0 / 0
03.09.2012, 13:35
    #37941218
Програмёр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
При переводе с VBScript на JavaScript цикл не работает(
VSVLAD,

точно, не заметил разницы, что теперь I - параметр функции. Спасибо что поправили. Внимательности мне явно не хватает.
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / При переводе с VBScript на JavaScript цикл не работает( / 19 сообщений из 19, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]