Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Горячая тема (более 10 ответов) Курю внешнюю компоненту для 7.7 на ассемблере. (число прочтений - 2555 )
chessman
God Member
*****
Отсутствует



Сообщений: 1084
Зарегистрирован: 10. Августа 2007
Курю внешнюю компоненту для 7.7 на ассемблере.
28. Июля 2010 :: 11:58
Печать  
Разбираюсь с внутренностями 7.7 на асме. Возникло несколько вопросов.

Я поставил перед собой такую минимальную задачку, создать справочник Контрагенты, перебрать его элементы и вывести в табло Наименования.

Собственно, задачу решил так:  
1. Вызываю конструктор CValue
2. Вызываю CValue:CreateObject
3. Получаю из (2) указатель на CBLContext
4. Вызываю конструктор CBLExportContext
5. Получаю dispid, требующихся методов и свойств, через  IDispatch
6. Перебираю элементы, вывожу в табло

Все это работает, вот только не пойму, как определить, что ПолучитьЭлемент() возвращает 0, т.е. что нужно закончить перебор.


Существует ли какой-то альтернативный способ перебора элементов справочника? Правильно ли я все сделал или это в корне не верно?
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Курю внешнюю компоненту для 7.7 на ассемблере.
Ответ #1 - 28. Июля 2010 :: 12:55
Печать  
если есть CBLContext то не зачем работать через IDispatch
  

1&&2&&3
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Курю внешнюю компоненту для 7.7 на ассемблере.
Ответ #2 - 28. Июля 2010 :: 12:59
Печать  
chessman писал(а) 28. Июля 2010 :: 11:58:
как определить, что ПолучитьЭлемент() возвращает 0

если работать через CBLContext то через второй параметр CallAsFunc как раз возвращается результат выполнения метода

а если все же хочется через IDispatch, то у Invoke тоже есть pVarResult
  

1&&2&&3
Наверх
 
IP записан
 
chessman
God Member
*****
Отсутствует



Сообщений: 1084
Зарегистрирован: 10. Августа 2007
Re: Курю внешнюю компоненту для 7.7 на ассемблере.
Ответ #3 - 28. Июля 2010 :: 13:06
Печать  
Понял, буду дальше смотреть.
  
Наверх
 
IP записан
 
chessman
God Member
*****
Отсутствует



Сообщений: 1084
Зарегистрирован: 10. Августа 2007
Re: Курю внешнюю компоненту для 7.7 на ассемблере.
Ответ #4 - 28. Июля 2010 :: 14:49
Печать  
trad писал(а) 28. Июля 2010 :: 12:59:
а если все же хочется через IDispatch, то у Invoke тоже есть pVarResult


С этим разобрался...нафига только 1С возвращает в Variant значение DOUBLE...не знаю, как с ним на асме работать, пока просто извернулся, сравнивая с 0, то, что отведено под это поле.
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Курю внешнюю компоненту для 7.7 на ассемблере.
Ответ #5 - 28. Июля 2010 :: 17:08
Печать  
chessman писал(а) 28. Июля 2010 :: 14:49:
нафига только 1С возвращает в Variant значение DOUBLE
а ты бы на их месте в какой тип варианта положил CNumeric?

А я не понимаю зачем ты мучаешься через OLE. Это не удобно и медленно. Работай с CBLContext напрямую
  

1&&2&&3
Наверх
 
IP записан
 
chessman
God Member
*****
Отсутствует



Сообщений: 1084
Зарегистрирован: 10. Августа 2007
Re: Курю внешнюю компоненту для 7.7 на ассемблере.
Ответ #6 - 28. Июля 2010 :: 18:54
Печать  
trad писал(а) 28. Июля 2010 :: 17:08:
а ты бы на их месте в какой тип варианта положил CNumeric?

Я просто рассчитывал, что в Variant возвратится, что-то типа единицы, при выполнении "ПолучитьЭлемент()", а там, что-то совсем на это не похожее.

trad писал(а) 28. Июля 2010 :: 17:08:
А я не понимаю зачем ты мучаешься через OLE. Это не удобно и медленно. Работай с CBLContext напрямую

Мне нужно было с чего-то начать...я начал с  того, что передавал объект справочника в компоненту, соответственно туда приезжает IDispatch, завернутый в Variant...а с Dispatch'ем я "умею" работать, вот и подумал, как получить Dispatch, но уже при помощи внутренностей 1С-ки.
Какой-то документации нет, поэтому действую методом тыка. Следующий шаг - попробую, как ты посоветовал.



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


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Курю внешнюю компоненту для 7.7 на ассемблере.
Ответ #7 - 29. Июля 2010 :: 04:14
Печать  
Нафига нужн ВК писать на ассемблере??
  

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



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Курю внешнюю компоненту для 7.7 на ассемблере.
Ответ #8 - 29. Июля 2010 :: 04:39
Печать  
chessman писал(а) 28. Июля 2010 :: 18:54:
Какой-то документации нет, поэтому действую методом тыка.

много есть в проекте 1с++.
исходники открыты.
да и тут, на форуме, могут подсказать
  

1&&2&&3
Наверх
 
IP записан
 
chessman
God Member
*****
Отсутствует



Сообщений: 1084
Зарегистрирован: 10. Августа 2007
Re: Курю внешнюю компоненту для 7.7 на ассемблере.
Ответ #9 - 02. Августа 2010 :: 09:50
Печать  
artbear писал(а) 29. Июля 2010 :: 04:14:
Нафига нужн ВК писать на ассемблере??


Да, собственно, "ВК" это слишком громко сказано, я просто эксперименты там провожу, хочу разобраться что-как работает.
  
Наверх
 
IP записан
 
chessman
God Member
*****
Отсутствует



Сообщений: 1084
Зарегистрирован: 10. Августа 2007
Re: Курю внешнюю компоненту для 7.7 на ассемблере.
Ответ #10 - 02. Августа 2010 :: 09:51
Печать  
trad писал(а) 29. Июля 2010 :: 04:39:
много есть в проекте 1с++.
исходники открыты.

этим я пользуюсь, тока полной картины пока не складывается

trad писал(а) 29. Июля 2010 :: 04:39:
да и тут, на форуме, могут подсказать


вот это больше всего греет душу
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать