DynWrapX.dll. Кто с ней работал - подскажите #560758


#0 by dmigav
Кто работал с DynWrapX, подскажите. Задача - используя DLL разработчика, считывать данные с воткнутого в COM-порт датчика. Пытаюсь юзать процедуры DLL через DynWrap. Код следующий: У процедуры ReadUInt третий параметр типа PChar. "Ругается" на несовпадение типов. Описание='Ошибка при вызове метода контекста (ReadUInt): Типы не совпадают ' ИмяМодуля='Форма.Форма' НомерСтроки=28 Как передать из 1Ски переменную типа PChar?
#1 by andrewks
а длл-ка не регистрируется?
#2 by dmigav
нет, не регится. Ошибка: "C:WINDOWSsystem32oewn_io.dll была загружена, но найти точку входа для DLLRegisterServer не удалось. Зарегистрировать этот файл невозможно".
#3 by andrewks
массив с нулём на конце не пробовал всовывать?
#4 by Fram
а ты без ключа -i попробуй
#5 by Fram
+ судя по "была загружена" это все таки ком объект
#6 by Nexux
мб 64 бита тогда C:WindowsSysWOW64 egsvr32
#7 by dmigav
Без ключа -i та же ошибка. Сам файл находится в windowssystem32 ОС стоит ХР SP3.
#8 by smaharbA
используй указатель
#9 by dmigav
А как его использовать? Мне нужно передать параметр  PChar('CEU'). Подскажи пожалуйста как сделать.
#10 by Smallrat
#11 by dmigav
да это я уже прочел. Не взлетает..
#12 by smaharbA
у серого же на форуме есть пример использования указателей
#13 by dmigav
я так и пробовал Пробовал играть вторым параметром в StrPtr. StrPtr( Var [, Type] )
#14 by smaharbA
что надо передать в библиотеку ?
#15 by smaharbA
или оно должно вернуть что то ?
#16 by smaharbA
+ где взять сабжевую библиотеку и будет ли она хоть как то работать без датчика ? и гда взять описание на ее методы ?
#17 by dmigav
Нужно вызвать процедуру из библиотеки. Вызываемые процедуры открытия и закрытия порта работают. Не работает процедура чтения данных с порта. Описание ее: // чтение беззнакового целочисленного значения function ReadUInt(adr_type,adr:DWORD;command:PChar;var value:DWORD;index:Integer): Integer; Stdcall; External 'owen_io.dll'; В 1С пытаюсь вызвать как
#18 by dmigav
Возвращаемое значение value содержит нужное мне число.
#19 by smaharbA
так не вернет, не работает по ссылке адинес (по крайней мере 77) надо с оберткой делать всеж таки дай библиотеку хоть
#20 by smaharbA
да и странно, что пчар используется, "не бывает" в виндузе пчаров, попробуй лонг и передать ссылку
#21 by dmigav
здесь библиотека и хелп
#22 by smaharbA
если будет не лениво вечером гляну
#23 by dmigav
Спасибо.
#24 by dmigav
Попробовал подобную процедуру (в ней передается PChar). Так она отрабатывает без ошибок. Поэтому методом исключения получается, что проблема не в параметре PChar, а в      "var value:DWORD". В котором возвращается цифра. непонятно что с ним не так..
#25 by dmigav
Этот код работает. res = Wrap.ReadUInt(16, ADRTYPE_8BIT, pCEU, 0, -1); Этот с ошибкой вылетает. Описание процедур (пример для Delphi): function ReadUInt(adr_type,adr:DWORD;command:PChar;var value:DWORD;index:Integer): Integer; Stdcall; External 'owen_io.dll';
#26 by smaharbA
еще раз - адинес не работает по ссылке - вернее работает по ссылке иначе
#27 by dmigav
Получается, что проблема, скорее всего, не в PChar..
#28 by smaharbA
Вот пример возврата по ссылке используя обертку (хотя х.з. лениво проверять - может в восьмерке и так вернет)
#29 by dmigav
с PChar получилось. Параметры задаются через Wrap.StrPtr("[значение параметра]", "z"). До сих пор не получается передать числовую переменную (тип DWORD), чтобы она вернула значение. Ругается и все тут. Т.е. просто числовую переменную могу передать, а переменную, которая вернет значение - НЕТ. (var Value: DWORD). А если использовать как по примеру То Стр - это строка. (Ошибка на несоответствие типов). Через процедуру StrPtr - тоже несоответствие типов (т.к. это для строки указатель).
#30 by dmigav
Как использовать указатель на число? Как его (указатель) из числовой переменной получить?
#31 by smaharbA
точно так же как в примере, в примере обертка возвращает строку, а тебе, что то типа (для просто динаврапера)
#32 by smaharbA
Так, с твоей библией после
#33 by dmigav
smaharbA, спасибо большое за советы и отклик! Не получилось правда через DynWrap. Решил вопрос, создав свою внешнюю компоненту.
Тэги: Админ
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С