VBA и VBS - работа со строками
От: EvG32  
Дата: 24.08.12 16:36
Оценка:
Доброго здоровья всем

Люди добрые, подскажите начинающему простой вопрос:
в Excel есть код:

Declare Function BYKCom_ListDevices Lib "BykUsbCom.dll" (ByVal result As String, ByVal MaxResult As Long, ByRef Written As Long) As Long ' функция библиотеки

Sub Кнопка()
  
    Dim r As String
    Dim dwMaxRes As Long
    Dim dwWritten As Long
    Dim error As Long
    Dim r_array As Variant
    Dim row As Integer
    Dim col As Integer
    Dim i As Integer
    
    dwMaxRes = 2000
    r = String(2000, 0) 'тут не пойму что за...
    
    error = BYKCom_ListDevices(r, dwMaxRes, dwWritten)
    If error = 0 Then
       
    Else

    End If
    
End Sub


результат в строке r = String(2000, 0) представляет из себя строку длиной в 2000 символов, но что за символы не понятно, watcher показывает квадраты, так понимаю символы в unicode, но что за символы??
string(2000, 0) — первый параметр — количество экземпляров символов, второй — код символа — 0?? пустой символ ? как тогда из пустого что то получается?
в vba работает, библиотека возвращает результат

пытаюсь запустить тоже самое в VBScript(через другую библиотеку, которая умеет подключать к себе библиотеки и вызывать их функции, так как не могу в VBS определить declare), как всегда НО:

Set DX = CreateObject("DynamicWrapperX") ' библиотека "обертка"
DX.Register "BykUsbCom.dll", "BYKCom_ListDevices", "i=sll", "r=l"' подключение к обертке конечной библиотеки и объявление одной из ее функций + типы и количество параметров, которые принимает функция + тип возвращаемого функцией значения

result = String(2000, ChrB(0))'Chr(0), ChrW(0) тоже самое
MaxResult = 2000
Written = 0
r = DX.BYKCom_ListDevices(result, MaxResult, Written)


VBS в проблемной строке возвращает пустую строку, что на мой взгляд логично
После чего при попытке вызвать функцию конечной библиотеки с передачей вышеописанных параметров вываливается ошибка runtime error (запускаю в SHIC)
То есть в VBA String(2000, 0) возвращает строку в юникоде(вроде) с пустыми символами, а VBS просто пустую строку, как получить аналогичный VBA результат?
Или может изначально не правильно делаю? Смысл в том что "конечная" библиотека работает с "девайсом", получает значения из его памяти. Есть рабочая программа, сделанная в экселе(добавляет полученные данные из девайса на лист эксель, приходится потом разбирать этот эксель и дергать из него данные через СОМобъекты, ADO и так далее(разные варианты пробовал)), но это жутко неудобно. Пробую перенести работу с девайсом в другую среду, используя VBS....

История запутанная конечно но хочется разобраться
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.