Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: как передать параметр по значению  (Прочитано 14025 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Anonymous
Гость
« : 15-09-2004 12:11 » 

Дело в следующем ... пишу внешнюю компоненту. Компонента (назовем ее A) должна визуализировать информацию достаточно хитрым способом т.е. часть она визуализирует сама, а часть делегирует COM объекту (так жемной написанному). Причем этот обект естессно реализует интерфейс IDispatch. Вот и вопрос как передать переменную функции-члену (назовем ее f) этого объекта (назовем его object) по ссылке!! дело в том что имея такой код

A=СоздатьОбъект("AddIn.A");
m = 90;

object = A.create();
object.f(m);
object.f(m);

параметр m передается по значению. код функции f такой
STDMETHODIMP Object::f(VARIANT * param)
{
param->vt = VT_R8;
param->dblVal = 345.665;
return S_OK;
}
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 15-09-2004 15:44 » 

для начала предположим, что предлагаемый к рассмотрению язык - С++ Улыбаюсь

интересно что за тип VARIANT, и какой тип у m

Но неважно, потому что непонятно, как компилятор пропускает такое:

Цитата

f(m);


когда

Цитата

STDMETHODIMP Object::f(VARIANT * param)


 :?:


а вот такой вызов:

f(&m);  

это имхо и есть то, что надо
то есть передастся только адрес переменной
Записан

Anonymous
Гость
« Ответ #2 : 16-09-2004 06:18 » 

Алексей1153, ))))))) посмеялся я от души... Видать плохо объяснил суть вопроса. Вот этот код
Цитата

A=СоздатьОбъект("AddIn.A");
m = 90;

object = A.create();
object.f(m);
object.f(m);

написан на внутреннем языке 1С (в коем я не силен), но насколько я понимаю там нет типов переменных они типа сами определяют какой тип, поэтому я так и написал m (безо всякого типа)
по поводу этого
Цитата

а вот такой вызов:

f(&m);

незнаю прокатит ли такое в 1С, ща попробую
а по поводу типа VARIANT (честно говоря это typedef от tagVARIANT) то он в MSDN описан... Он нужен для написания COM объектов (например для VB)
Записан
Anonymous
Гость
« Ответ #3 : 16-09-2004 06:32 » 

то Алексей1153, как я и ожидал, такое
Цитата

f(&m);

не прокатило

кстати по поводу
Цитата

для начала предположим, что предлагаемый к рассмотрению язык - С++

если б я хотел чего нить-про с++ узнать Отлично , то я бы в соответствующий форум писал, а тут типа вопросы касающиеся 1С Отлично
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #4 : 16-09-2004 09:22 » 

Отлично

вот так бывает. Сплю на системном блоке.

хотя фразу
Цитата

там нет типов переменных они типа сами определяют какой тип

разум мой, поражённый С++ , принять отказывается Улыбаюсь

Короче - тут я ничем не помогу
Записан

lapulya
Молодой специалист

ru
Offline Offline

« Ответ #5 : 16-09-2004 12:30 » 

собственно это я гость, все отвлекался ... а как запостил так и гостем стал  Отлично  , а по поводу переменной без определенного типа, так в VB только такое помоему и есть (правда я и в VB не спец),  гляди определение VARIANT в MSDN РЕКОМЕДУЮ!!! сразу поймешь как это переменная для любогго типа (в индексе MSDN набери VARIANT and VARIANTARG)
Записан

С уважением Lapulya
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #6 : 16-09-2004 12:45 » 

lapulya,
Цитата

переменная для любогго типа

я такое не воспринимаю - организьм отвергает Улыбаюсь
Записан

Harry
Модератор

ua
Offline Offline

« Ответ #7 : 16-09-2004 20:33 » 

Цитата: Anonymous
насколько я понимаю там нет типов переменных они типа сами определяют какой тип

В общем-то не совсем. Переменные имеют тип. Число, строка, Справочник.Номенклатура, Справочник.Фирмы,AddIn и т.п.... так что не совсем они без типа   Улыбаюсь
Записан

Слабый пол силен в силу слабости сильного пола к слабому
lapulya
Молодой специалист

ru
Offline Offline

« Ответ #8 : 17-09-2004 09:03 » 

Harry, привет тебе, ну так как передать параметр по ССЫЛКЕ! а не по значению... ООЧЕНЬ надо!!! :new_shot:
Записан

С уважением Lapulya
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #9 : 17-09-2004 14:56 » 

lapulya, не знаю, как в твоём случае, но недавно мне пришлось (клянусь - очень ненадолго!) вновь столкнуться с VisualBasic - и мне там такая же фигня потребовалась (кстати - за что не нравится мне он, так за необязательность определения переменных.).

Так вот, там было так: если просто писать
f(m)
то передаётся по значению, а если
call f(m)
то по ссылке...

мож в 1с такая же замута?
Записан

lapulya
Молодой специалист

ru
Offline Offline

« Ответ #10 : 17-09-2004 22:50 » 

Алексей1153, да VB по сравнению с 1C просто рулит!!!
но я специально в бейстке тоже самое написал... типа

object.f(m);

и он УЖЕ сразу ее по ссылке передал (повторяю я в бейсике полный лох), без всяких call
но за совет спасибо, ща попробую, а вдруг прокатит Ага
Записан

С уважением Lapulya
Harry
Модератор

ua
Offline Offline

« Ответ #11 : 20-09-2004 21:32 » 

lapulya Извини, пропустил твой вопрос, поскольку остался без Инета. А в 1С у меня тоже не получилось передать по ссылке (в общем-то не требовалось), по крайней мере конструкций типа f(&m); в 1С нет, все передается по значению. Попробуй порыть описание языка (лежит в литературе), но ничего похожего там я не нашел.
Записан

Слабый пол силен в силу слабости сильного пола к слабому
lapulya
Молодой специалист

ru
Offline Offline

« Ответ #12 : 24-09-2004 08:17 » 

Мммда... плохо!!! действительно эта тупая скотина передает значения только по значению... ООООЧЕНЬ ПЛОХО, ну да хрен с ним, будем общяться через результат возвращаемый функцией
Записан

С уважением Lapulya
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines