Переключение на Главную Страницу Страницы: 1 2 3 [4] 5 6 ... 8 ОтправитьПечать
Очень популярная тема (более 25 ответов) v7lua.dll - ВК для интеграции 1С и Lua (число прочтений - 36214 )
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: v7lua.dll - ВК для интеграции 1С и Lua
Ответ #45 - 14. Июля 2008 :: 18:29
Печать  
steban писал(а) 14. Июля 2008 :: 10:28:
steban писал(а) 13. Июля 2008 :: 18:25:
добавлена работа с типами 1С (вызов методов, получение и установка свойств объектов 1С из скрипта)

Обнаружил в этой части парочку багов.

Как осуществить доступ к контексту?
Код
Выбрать все
	|	nextref = function(ref)
	|		ref.ПолучитьЭлемент();
	|		print(ref.Наименование);
	|		return ref.ТекущийЭлемент();
	|	end,
 


что-то не катит пока.

Я правильно, вообще, саму идею понимаю?
Если правильно, то это замечательно, но также необходима и возможность создавать новые объекты внутри скрипта.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: v7lua.dll - ВК для интеграции 1С и Lua
Ответ #46 - 14. Июля 2008 :: 18:48
Печать  
kms писал(а) 14. Июля 2008 :: 18:05:
Спасибо за пример.
Передача себя в виде параметра неизбежна?

ну это вроде как this или self Улыбка
В Lua можно использовать сокращенный синтаксис:
table:method(param) = table.method(table, param)
В 1С приходится использовать полный синтаксис.

kms писал(а) 14. Июля 2008 :: 18:05:
Какую-то странную проблему поймал.
При определенных обстоятельствах v7lua падает в тесте.
Не знаю, в чем причина.
В обработке есть строка, которую если закомментарить - падать перестанет.
Надеюсь, удастся разобраться.
Если что, код icpp для этого теста (исходник сборки) залит в CVS.

Предлагаю тестирование временно свернуть.
Я там такие чудеса обнаружил....
Буду разбираться.
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: v7lua.dll - ВК для интеграции 1С и Lua
Ответ #47 - 14. Июля 2008 :: 18:52
Печать  
Как эт свернуть? Мы ж только начали? Очень довольный
На самом деле, тема оказалась очень интересна, я буду ждать продолжения.

Вдогонку.
Вот так удалось что-то получить:
Код
Выбрать все
	|	nextref = function(ref)
	|		ref.GetItem();
	|		print(ref.Description);
	|		return ref.CurrentItem();
	|	end
 


Но возвращаемое значение (или преобразование) лажает.
Плюс конечно, хотелось бы русские букфы в скриптах, сам понимаешь, по английски "x@№" красиво не напишешь Улыбка

Удачи.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: v7lua.dll - ВК для интеграции 1С и Lua
Ответ #48 - 14. Июля 2008 :: 18:54
Печать  
kms писал(а) 14. Июля 2008 :: 18:29:
Как осуществить доступ к контексту?
Код
Выбрать все
	|	nextref = function(ref)
	|		ref.ПолучитьЭлемент();
	|		print(ref.Наименование);
	|		return ref.ТекущийЭлемент();
	|	end,
 


что-то не катит пока.

В Lua пока нет возможности использовать кириллические идентификаторы (думаю чуток пропатчить лексер на эту тему).
Поэтому для вызова методов придется опять использовать полный синтаксис:
Код
Выбрать все
	|	nextref = function(ref)
	|		ref['ПолучитьЭлемент']();
	|		print(ref.['Наименование']);
	|		return ref['ТекущийЭлемент']();
	|	end,
 


В 1.0.1.0 такой код прокатит только для контекстов. И не прокатит для CValue у которых IsExactValue()=1.
В моей сборке такой код сейчас работает, но там есть другие проблемы...
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: v7lua.dll - ВК для интеграции 1С и Lua
Ответ #49 - 14. Июля 2008 :: 19:01
Печать  
kms писал(а) 14. Июля 2008 :: 18:29:
также необходима и возможность создавать новые объекты внутри скрипта.

Приведу в стабильное состояние, а потом подумаем на эту тему.
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: v7lua.dll - ВК для интеграции 1С и Lua
Ответ #50 - 14. Июля 2008 :: 19:02
Печать  
kms писал(а) 14. Июля 2008 :: 18:52:
Но возвращаемое значение (или преобразование) лажает.

Эт я уже решил.
В следующей версии не будет.
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: v7lua.dll - ВК для интеграции 1С и Lua
Ответ #51 - 15. Июля 2008 :: 20:23
Печать  
Выложил версию 1.0.1.1.
В этой версии в основном багфиксы.
ВК заметно похудела и избавилась от зависимости от runtime vc80.

По сравнению с предыдущей версией, утеряна возможность работы с групповыми контекстами.
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: v7lua.dll - ВК для интеграции 1С и Lua
Ответ #52 - 16. Июля 2008 :: 06:47
Печать  
Версия 1.0.1.2:
  • разрешено использование русских идентификаторов
  • исправлен вылет при вызове функций Lua из других ВК (теперь при попытке таких вызовов выполняется вызов без параметров)
  • реализовано чтение свойств и вызов методов групповых контекстов (для других объектов 1с должно работать все: чтение/установка свойств и вызов методов). Установку свойств для групповых контекстов можно сделать через вызов метода-setter'а. Тем более, что вызов метода 1С из Lua намного эффективнее работы со свойствами.

« Последняя редакция: 16. Июля 2008 :: 07:59 - steban »  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: v7lua.dll - ВК для интеграции 1С и Lua
Ответ #53 - 16. Июля 2008 :: 06:57
Печать  
kms писал(а) 14. Июля 2008 :: 18:05:
Какую-то странную проблему поймал.
При определенных обстоятельствах v7lua падает в тесте.
Не знаю, в чем причина.
В обработке есть строка, которую если закомментарить - падать перестанет.
Надеюсь, удастся разобраться.

Разобраться удалось.
В Lua любые функции - функции с неопределенным количеством параметров.
Для определения количества фактических параметров я применил метод, аналогичный примененному в CMyContextBase.
1С перед вызовом CallAsProc/CallAsFunc делает вызов IsOleContext.
При этом в ebx лежит число фактических параметров.
icpp сразу вызывает CallAsFunc.
имхо, такая-же засада будет при вызове из icpp методов КОП с неопределенным количеством параметров.

2 kms: удастся это поправить со стороны icpp? т.е. вставить вызов IsOleContext и добиться чтобы оно скомпилировалось так, чтобы в ebx лежало количество параметров.
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: v7lua.dll - ВК для интеграции 1С и Lua
Ответ #54 - 16. Июля 2008 :: 07:38
Печать  
steban писал(а) 16. Июля 2008 :: 06:57:
имхо, такая-же засада будет при вызове из icpp методов КОП с неопределенным количеством параметров.

Так и есть. Я об этом писал когда-то. Вот...
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: v7lua.dll - ВК для интеграции 1С и Lua
Ответ #55 - 16. Июля 2008 :: 08:19
Печать  
steban писал(а) 16. Июля 2008 :: 06:57:
kms писал(а) 14. Июля 2008 :: 18:05:
Какую-то странную проблему поймал.
При определенных обстоятельствах v7lua падает в тесте.
Не знаю, в чем причина.
В обработке есть строка, которую если закомментарить - падать перестанет.
Надеюсь, удастся разобраться.

Разобраться удалось.
В Lua любые функции - функции с неопределенным количеством параметров.
Для определения количества фактических параметров я применил метод, аналогичный примененному в CMyContextBase.
1С перед вызовом CallAsProc/CallAsFunc делает вызов IsOleContext.
При этом в ebx лежит число фактических параметров.
icpp сразу вызывает CallAsFunc.
имхо, такая-же засада будет при вызове из icpp методов КОП с неопределенным количеством параметров.

2 kms: удастся это поправить со стороны icpp? т.е. вставить вызов IsOleContext и добиться чтобы оно скомпилировалось так, чтобы в ebx лежало количество параметров.

А можно подробнее о том, как связаны icpp и твоя ВК ?
Или в примере kms все есть?
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: v7lua.dll - ВК для интеграции 1С и Lua
Ответ #56 - 16. Июля 2008 :: 08:23
Печать  
steban писал(а) 16. Июля 2008 :: 06:57:
2 kms: удастся это поправить со стороны icpp? т.е. вставить вызов IsOleContext и добиться чтобы оно скомпилировалось так, чтобы в ebx лежало количество параметров.

То-то я смотрю, у тебя по 20 параметров куда ни глянь.
--
Достаточно один раз вызвать для данного номера метода, если после это число параметров не меняется?
  

De quelle planète es-tu?
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: v7lua.dll - ВК для интеграции 1С и Lua
Ответ #57 - 16. Июля 2008 :: 08:24
Печать  
artbear писал(а) 16. Июля 2008 :: 08:19:
А можно подробнее о том, как связаны icpp и твоя ВК ?
Или в примере kms все есть?

Есть - см. использование "ЗаполнитьКолонкуПоАлгоритму" для Lua.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: v7lua.dll - ВК для интеграции 1С и Lua
Ответ #58 - 16. Июля 2008 :: 08:32
Печать  
kms писал(а) 16. Июля 2008 :: 08:23:
Достаточно один раз вызвать для данного номера метода, если после это число параметров не меняется?

Для CComponentClass достаточно.
Для LuaRef недостаточно.
Я обнуляю значение, полученное в IsOleContext после каждого вызова.
Если мне кто-то докажет, что ненаступление на грабли гарантировано, я это обнуление уберу.
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: v7lua.dll - ВК для интеграции 1С и Lua
Ответ #59 - 16. Июля 2008 :: 08:35
Печать  
steban писал(а) 16. Июля 2008 :: 08:32:
kms писал(а) 16. Июля 2008 :: 08:23:
Достаточно один раз вызвать для данного номера метода, если после это число параметров не меняется?

Для CComponentClass достаточно.
Для LuaRef недостаточно.
Я обнуляю значение, полученное в IsOleContext после каждого вызова.
Если мне кто-то докажет, что ненаступление на грабли гарантировано, я это обнуление уберу.

А почему в моем примере достаточно раскомментарить всего одну строчку с первым вызовом из 1С?
Если бы ты обнулял, было бы не так.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 2 3 [4] 5 6 ... 8
ОтправитьПечать