Сценарий VB в Wine не возвращает значения для функции RND

Я пытаюсь запустить ниже vbscript в Linux с помощью Wine, но это не работает. Другие функции vbscript работают должным образом.

Версия Wine: wine-5.0.3 (Ubuntu 5.0.3-3) Команда: wine cscript ./test_rnd.vbs

VBS:

   On Error Resume Next
WScript.Echo "Before Rnd"

Rnd -1

WScript.Echo "After Rnd"

If Err.Number <> 0 Then
  WScript.Echo "Error : " & Err.Number & ": " & Err.Description
End If

Вывести с помощью Wine:

введите описание изображения здесь

Этот сценарий отлично работает в Windows.

Нужно ли мне устанавливать какие-либо другие винные зависимости? если у вас есть какое-либо альтернативное решение для запуска VBS в Linux, пожалуйста, укажите.


person Ara    schedule 25.04.2021    source источник
comment
Вы можете описать, что значит не работает? Что возвращает функция? Или выдает ошибку? Err установлен?   -  person CherryDT    schedule 25.04.2021
comment
Выполнение не продолжается после строки Rnd -1. Цель этой функции - вернуть случайное число, основанное на начальном значении, которое мы здесь устанавливаем Randomize 3922004   -  person Ara    schedule 25.04.2021
comment
Что вы имеете в виду, это не продолжается? Любой вывод на консоль? Какой код выхода возвращает cscript.exe? если вы добавите On Error обработчик, какую ошибку будет содержать Err?   -  person CherryDT    schedule 25.04.2021
comment
Может быть, вам следует сначала заполнить ГСЧ перед попыткой его использовать?   -  person CherryDT    schedule 25.04.2021
comment
@CherryDT Я обновил вопрос выводом   -  person Ara    schedule 25.04.2021
comment
Работает ли Randomize перед попыткой Rnd? Я не могу найти никакой информации об этом в Интернете, я предполагаю, что это просто не реализовано. Возможно, вам стоит спросить и на форумах о винах.   -  person CherryDT    schedule 25.04.2021
comment
_ 1_ и _ 2_ использовать системный таймер ОС для генерации начального числа, которое будет другой реализацией в среде Linux.   -  person user692942    schedule 25.04.2021


Ответы (2)


_ 1_ зависит от начальных значений, сгенерированных _ 2_ инструкция, которая генерирует начальные числа с помощью системного таймера ОС, функции ОС Windows. В то время как в Linux будет что-то подобное, база кода VBScript не знает, как это назвать, и будет зависеть от Wine для предоставить реализацию, имитирующую системный таймер Windows.

Поскольку ошибка, которую вы получаете,

Object doesn’t support this action

Боюсь, вам не повезет, пока Wine не предоставит реализацию.

person user692942    schedule 25.04.2021

Хотя кажется, что Wine не поддерживает функцию VBScript Rnd, как насчет вашей собственной реализации случайной функции с чем-то вроде этого?

Function RndNum(MaxValue)
    RndNum = (((Hour(Now) + 1) * (Minute(Now) + 1) * (Second(Now) + 1) * Right(Timer, 5)) Mod MaxValue)
End Function

Как вручную генерировать случайные числа

Изменить:

Приведенный выше код не генерирует случайные числа при запуске в цикле, так как временная метка недостаточно точна.

введите описание изображения здесь

Обновление функции для использования внешнего Seed действительно работает, однако я не ручаюсь за то, насколько они уникальны, я предполагаю, что это не будет для криптографии ...

Function RndNum(Seed, MaxValue)
    RndNum = (((Hour(Now) + 1) * (Minute(Now) + 1) * (Second(Now) + 1) * Right((Seed * Right(Timer, 5)), 8)) Mod MaxValue) 
End Function

Do
    counter = counter + 1
    Numbers = Numbers & RndNum(counter,1000) & ", "
Loop While counter < 10

MsgBox Numbers

введите описание изображения здесь

person Moir    schedule 25.04.2021
comment
Хотя попытка смелая, это не эквивалент, потому что 1. Точность времени VBScript недостаточно точна. 2. Системный таймер используется для генерации начального числа или принимает начальное начальное число, которое будет использоваться с системным таймером при генерации случайных значений. - person user692942; 26.04.2021
comment
@ user692942 Конечно, я уверен, что они, скорее всего, не будут случайными, как функция Rnd, но что вы думаете после использования счетчика циклов в качестве внешнего начального числа? В зависимости от потребности, на мой взгляд, это может быть достаточно случайным. - person Moir; 26.04.2021
comment
Это зависит от требований пользователей к его использованию. - person user692942; 26.04.2021