Переключение на Главную Страницу Страницы: [1] 2 3 ... 5 ОтправитьПечать
Очень популярная тема (более 25 ответов) Создание компонент (число прочтений - 26396 )
DrunkProgrammer
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 128
Зарегистрирован: 28. Декабря 2007
Создание компонент
28. Декабря 2007 :: 09:27
Печать  
Возможно я не туда пишу, но такая вот проблема: пытаюсь создавать компоненты на C# 2.0 для 1С 7.7 и пока, могу создать только те, которые выполняют какие либо методы, не возвращающие значения. Методы компоненты 1c++ могут возвращать значения внутренних типов 1С, например: ТаблицаЗначений. Подскажите пожалуйста, каким образом компонента формирует этот объект?  Вы используете какую-то определенную библиотеку?
  
Наверх
 
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Создание компонент
Ответ #1 - 28. Декабря 2007 :: 09:35
Печать  
Скачай исходники и посмотри  Подмигивание

Что делают компоненты то?
  
Наверх
ICQ  
IP записан
 
DrunkProgrammer
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 128
Зарегистрирован: 28. Декабря 2007
Re: Создание компонент
Ответ #2 - 28. Декабря 2007 :: 09:38
Печать  
Так исходники на С++, а я на C# пишу, к тому же зачем париться, если достаточно узнать, какая библиотека нужна или может как-то используется параметр, передаваемый в Init()?
  
Наверх
 
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Создание компонент
Ответ #3 - 28. Декабря 2007 :: 09:45
Печать  
DrunkProgrammer писал(а) 28. Декабря 2007 :: 09:38:
Так исходники на С++, а я на C# пишу, к тому же зачем париться, если достаточно узнать, какая библиотека нужна или может как-то используется параметр, передаваемый в Init()?

Библиотеки используются от самой 1с,  heder есть в исходниках.
  
Наверх
ICQ  
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Создание компонент
Ответ #4 - 28. Декабря 2007 :: 09:48
Печать  
И всётаки что за компанента? Может тебе классами обойтись можно?
  
Наверх
ICQ  
IP записан
 
DrunkProgrammer
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 128
Зарегистрирован: 28. Декабря 2007
Re: Создание компонент
Ответ #5 - 28. Декабря 2007 :: 09:48
Печать  
Надо будет покопаться, спасибо.
  
Наверх
 
IP записан
 
DrunkProgrammer
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 128
Зарегистрирован: 28. Декабря 2007
Re: Создание компонент
Ответ #6 - 28. Декабря 2007 :: 11:24
Печать  
Покопался немного и накопал проблему: дело в том, что 1С-овские библиотеки не подключаются в VS2005, выходит ругань: A reference to "Путь к файлу" could not be added. Please make sure that the file is accessible, and that it is a valid assembly or COM component.
Мне посоветовали возпользоваться DLLImport или Invoke, но для этого нужно знать имена и параметры требуемых функций. Может подскажете, а? Нерешительный
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Создание компонент
Ответ #7 - 28. Декабря 2007 :: 11:42
Печать  
В штатной технологии создания ВК это всё описано. Не помню, есть ли она вся на дисках ИТС, примеры из неё точно есть - в том числе на VB.NET и C++ для VS 2002 (7.0). Для C# пример: http://www.rsdn.ru/article/dotnet/cs1c.xml

Цитата:
Так исходники на С++, а я на C# пишу, к тому же зачем париться, если достаточно узнать, какая библиотека нужна или может как-то используется параметр, передаваемый в Init()?

Именно он и используется.
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
DrunkProgrammer
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 128
Зарегистрирован: 28. Декабря 2007
Re: Создание компонент
Ответ #8 - 29. Декабря 2007 :: 02:45
Печать  
Вообще пример для VS2003, но для 2005 тоже наверно подойдет.
Спасибо! Улыбка
  
Наверх
 
IP записан
 
DrunkProgrammer
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 128
Зарегистрирован: 28. Декабря 2007
Re: Создание компонент
Ответ #9 - 23. Апреля 2008 :: 09:44
Печать  
Тему поднимал давно. Тогда я все-таки сие дело забросил. А сейчас вот появилась потребность, только на этот раз пишется компонента для 1С 8.1 и нужно вытащить класс ТаблицаЗначений уже из 8.1 чтобы заполнить и вернуть. В данный момент я просто возвращаю из компоненты C#-шный массив, который в 1С 8.1 виден как COMSafeArray. Или реализую интерфейс IEnumerable, а в 1С читаю циклом "Для Каждого".
Есть определенные неудобства в такой работе, поэтому очень хочется вернуть таблицу значений. Может кто подкинет пример "вытаскивания" таблицы значений, хоты бы из 7.7?
  
Наверх
 
IP записан
 
trdm
1c++ power user
qt1l developer
1c++ moderator
Отсутствует



Сообщений: 2343
Местоположение: г. Ростов-на-Дону
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Создание компонент
Ответ #10 - 23. Апреля 2008 :: 10:00
Печать  
DrunkProgrammer писал(а) 23. Апреля 2008 :: 09:44:
только на этот раз пишется компонента для 1С 8.1 и нужно вытащить класс ТаблицаЗначений уже из 8.1 чтобы заполнить и вернуть. И Может кто подкинет пример "вытаскивания" таблицы значений, хоты бы из 7.7?

О_о
  
Наверх
IP записан
 
DrunkProgrammer
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 128
Зарегистрирован: 28. Декабря 2007
Re: Создание компонент
Ответ #11 - 23. Апреля 2008 :: 10:07
Печать  
trdm писал(а) 23. Апреля 2008 :: 10:00:
О_о

?
  
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Создание компонент
Ответ #12 - 23. Апреля 2008 :: 10:14
Печать  
Вот тут DmitrO делал компоненту, которая создавала ТЗ из ADO.Recordset.
Исходников нет.

Предположительно реализация такова:
-Создается ТЗ вызовом NewObject("ТаблицаЗначений") Automation-сервера 1С
-заполняется при помощи штатных методов ТЗ ( ТЗ.Колонки.добавить(), ТЗ.Добавить() и т.п.)
-вероятно DispID вызываемых методов запоминаются, чтобы уменьшить число вызовов IDispatch::GetIDsOfNames
  

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


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Создание компонент
Ответ #13 - 23. Апреля 2008 :: 10:14
Печать  
steban писал(а) 23. Апреля 2008 :: 10:14:
Вот тут DmitrO делал компоненту, которая создавала ТЗ из ADO.Recordset.
Исходников нет.

Предположительно реализация такова:
-Создается ТЗ вызовом NewObject("ТаблицаЗначений") Automation-сервера 1С
-заполняется при помощи штатных методов ТЗ ( ТЗ.Колонки.добавить(), ТЗ.Добавить() и т.п.)
-вероятно DispID вызываемых методов запоминаются, чтобы уменьшить число вызовов IDispatch::GetIDsOfNames

+1
  

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


I Love YaBB 2!

Сообщений: 128
Зарегистрирован: 28. Декабря 2007
Re: Создание компонент
Ответ #14 - 23. Апреля 2008 :: 10:22
Печать  
Так мне то нужно получить 1С-овский класс в C#, чтобы заполнить и вернуть в 1С. Разве нельзя вытянуть класс из 1С?
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 3 ... 5
ОтправитьПечать