|
DynWrapX.dll. Кто с ней работал - подскажите | ☑ | ||
|---|---|---|---|---|
|
0
dmigav
19.07.11
✎
18:05
|
Кто работал с DynWrapX, подскажите.
Задача - используя DLL разработчика, считывать данные с воткнутого в COM-порт датчика. Пытаюсь юзать процедуры DLL через DynWrap. Код следующий: Wrap = Новый COMОбъект("DynamicWrapperX"); Wrap.Register("owen_io.dll", "ReadUInt", "i=llpll", "f=s", "r=l"); pCtr = Wrap.StrPtr("Ctr"); res = Wrap.ReadUInt(16, 0, pCtr, 0, -1); У процедуры ReadUInt третий параметр типа PChar. "Ругается" на несовпадение типов. Описание='Ошибка при вызове метода контекста (ReadUInt): Типы не совпадают (6)' ИмяМодуля='Форма.Форма' НомерСтроки=28 ИсходнаяСтрока=' res = Wrap.ReadUInt(16, ADRTYPE_8BIT, "Ctr", Знач1, -1);' Как передать из 1Ски переменную типа PChar? |
|||
|
1
andrewks
19.07.11
✎
18:11
|
а длл-ка не регистрируется?
|
|||
|
2
dmigav
19.07.11
✎
18:16
|
нет, не регится.
Ошибка: "C:\WINDOWS\system32\oewn_io.dll была загружена, но найти точку входа для DLLRegisterServer не удалось. Зарегистрировать этот файл невозможно". |
|||
|
3
andrewks
19.07.11
✎
18:25
|
массив с нулём на конце не пробовал всовывать?
|
|||
|
4
Fram
19.07.11
✎
18:48
|
(2) а ты без ключа -i попробуй
|
|||
|
5
Fram
19.07.11
✎
18:48
|
+(4) судя по "была загружена" это все таки ком объект
|
|||
|
6
Nexux
19.07.11
✎
18:51
|
мб 64 бита тогда C:\Windows\SysWOW64\regsvr32
|
|||
|
7
dmigav
20.07.11
✎
09:52
|
Без ключа -i та же ошибка.
Сам файл находится в windows\system32 ОС стоит ХР SP3. |
|||
|
8
smaharbA
20.07.11
✎
09:54
|
используй указатель
|
|||
|
9
dmigav
20.07.11
✎
10:01
|
А как его использовать?
Мне нужно передать параметр PChar('CEU'). Подскажи пожалуйста как сделать. |
|||
|
10
Smallrat
20.07.11
✎
10:04
|
||||
|
11
dmigav
20.07.11
✎
10:13
|
(10) да это я уже прочел.
Не взлетает.. |
|||
|
12
smaharbA
20.07.11
✎
10:22
|
(11) у серого же на форуме есть пример использования указателей
|
|||
|
13
dmigav
20.07.11
✎
10:28
|
я так и пробовал
pCtr = Wrap.StrPtr("Ctr"); res = Wrap.ReadUInt(16, 0, pCtr, 0, -1); Пробовал играть вторым параметром в StrPtr. StrPtr( Var [, Type] ) |
|||
|
14
smaharbA
20.07.11
✎
10:33
|
что надо передать в библиотеку ?
|
|||
|
15
smaharbA
20.07.11
✎
10:34
|
или оно должно вернуть что то ?
|
|||
|
16
smaharbA
20.07.11
✎
10:36
|
+ где взять сабжевую библиотеку и будет ли она хоть как то работать без датчика ? и гда взять описание на ее методы ?
|
|||
|
17
dmigav
20.07.11
✎
10:45
|
Нужно вызвать процедуру из библиотеки.
Вызываемые процедуры открытия и закрытия порта работают. Не работает процедура чтения данных с порта. Описание ее: // чтение беззнакового целочисленного значения function ReadUInt(adr_type,adr:DWORD;command:PChar;var value:DWORD;index:Integer): Integer; Stdcall; External 'owen_io.dll'; В 1С пытаюсь вызвать как Знач1 = 0; pCtr = Wrap.StrPtr("Ctr"); res = Wrap.ReadUInt(16, ADRTYPE_8BIT, "Ctr", Знач1, -1); |
|||
|
18
dmigav
20.07.11
✎
10:45
|
Возвращаемое значение value содержит нужное мне число.
|
|||
|
19
smaharbA
20.07.11
✎
11:36
|
так не вернет, не работает по ссылке адинес (по крайней мере 77)
надо с оберткой делать всеж таки дай библиотеку хоть |
|||
|
20
smaharbA
20.07.11
✎
11:37
|
да и странно, что пчар используется, "не бывает" в виндузе пчаров, попробуй лонг и передать ссылку
|
|||
|
21
dmigav
20.07.11
✎
12:19
|
||||
|
22
smaharbA
20.07.11
✎
12:33
|
(21) если будет не лениво вечером гляну
|
|||
|
23
dmigav
20.07.11
✎
13:12
|
Спасибо.
|
|||
|
24
dmigav
20.07.11
✎
13:13
|
Попробовал подобную процедуру (в ней передается PChar).
Так она отрабатывает без ошибок. Поэтому методом исключения получается, что проблема не в параметре PChar, а в "var value:DWORD". В котором возвращается цифра. непонятно что с ним не так.. |
|||
|
25
dmigav
20.07.11
✎
13:15
|
prStC = Wrap.StrPtr("rStC");
res = Wrap.WriteByte(16, ADRTYPE_8BIT, prStC, 0, -1); Этот код работает. pCEU = Wrap.StrPtr("CEU"); res = Wrap.ReadUInt(16, ADRTYPE_8BIT, pCEU, 0, -1); Этот с ошибкой вылетает. Описание процедур (пример для Delphi): function WriteByte(adr,adr_type:DWORD;command:PChar;value:Integer;index:Integer): Integer; Stdcall; External 'owen_io.dll'; function ReadUInt(adr_type,adr:DWORD;command:PChar;var value:DWORD;index:Integer): Integer; Stdcall; External 'owen_io.dll'; |
|||
|
26
smaharbA
20.07.11
✎
13:15
|
еще раз - адинес не работает по ссылке - вернее работает по ссылке иначе
|
|||
|
27
dmigav
20.07.11
✎
13:16
|
Получается, что проблема, скорее всего, не в PChar..
|
|||
|
28
smaharbA
20.07.11
✎
14:16
|
Вот пример возврата по ссылке используя обертку (хотя х.з. лениво проверять - может в восьмерке и так вернет)
|
|||
|
29
dmigav
21.07.11
✎
13:20
|
с PChar получилось.
Параметры задаются через Wrap.StrPtr("[значение параметра]", "z"). До сих пор не получается передать числовую переменную (тип DWORD), чтобы она вернула значение. Ругается и все тут. Т.е. просто числовую переменную могу передать, а переменную, которая вернет значение - НЕТ. (var Value: DWORD). А если использовать как по примеру Для Сч=1 По 16 Цикл Стр=Формат(0,"ЧЦ=64;ЧВН=;ЧН=;ЧГ=0")+Стр; КонецЦикла; Стр=СтрЗаменить(Стр,0," "); То Стр - это строка. (Ошибка на несоответствие типов). Через процедуру StrPtr - тоже несоответствие типов (т.к. это для строки указатель). |
|||
|
30
dmigav
21.07.11
✎
13:22
|
Как использовать указатель на число? Как его (указатель) из числовой переменной получить?
|
|||
|
31
smaharbA
21.07.11
✎
14:12
|
точно так же как в примере, в примере обертка возвращает строку, а тебе, что то типа (для просто динаврапера)
|
|||
|
32
smaharbA
21.07.11
✎
19:22
|
Так, с твоей библией после
|
|||
|
33
dmigav
12.08.11
✎
12:01
|
smaharbA, спасибо большое за советы и отклик!
Не получилось правда через DynWrap. Решил вопрос, создав свою внешнюю компоненту. |
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |