Специалисты 1С прошу консультации.

Новая тема
Показывать по 10 20 40 сообщений
"Здравствуйте, господа.
Я не спец в сабже.
Написал некий модуль ActveX для подключения приборов(ВЗВЕШИВАНИЕ ПОСРЕДСТВОМ ТЕНЗОДАТЧИКОВ) к 1с.

Совместима с 1С версии 8.
Необходимо зарегистрировать  при помощи RegSvr32.
После этого возможен вызов функции взвешивания.

В 1С версии 8 выглядит так

Перем w;
....
....
....
....

                      Весы =  Новый COMОбъект("AWVSP.WeightClass");
                      Сообщить("Соединение установлено.");
                      Весы.TakeWeight("COM1",9600,1,w);
                      Сообщить(w);
И так работает, впринципе нормально.
Но одному клинету захотелось к 7.7.
Фиг с ним, там тожде вызывается этот компонент.Немного по другому...
     
             Весы=Создатьобъект("AWVSP.WeightClass");
           
           Весы.TakeWeight("COM1",9600,0,w);
            Сообщить(w);
Форма появляется и вес в ней отображается.Но в переменной w значение не появляется.
Подскажите в чем может быть трабла.Может кто знает."
"А чего это 3-й параметр для 8-ки = "1", а для 7-ки = "0"?
А если попробовать переменную "w" определять перед вызовом метода внешней компоненты?

w = 0;
Весы.TakeWeight("COM1",9600,0,w);
Сообщить(w);
"
Это парамет, нужный исключительно прибору.И к возвращаемому значению отношения не имеет.
Там может быть и то и другое.
Важно отметить, что  dll содержит код формы с отображением веса на платформе.
И оно появляется в обоих случаях.
Функция  TakeWeight(BSTR port, int boud, int req,  int* RetVal).
Следует обратить внимание на int* RetVal-посдений параметр в ней.
Возможно в механизме передачи параметров и кроется лажа.
Но я читал, что в 1С параметры передаются по ссылке.
И в 1с8 это работает.
А в 1с77 форма появляется, вес отображается, но в переменную w ничего не возвращается.
если попробовать переменную "w" определять перед вызовом метода внешней компоненты то после вызова в ней и будет то значение которым его определили.
Как будто ничего и не произошло.
Но в восьмерке то работает...
А "int*" это какой тип, может 7.7 просто не поддерживает этот тип?
это указатель на целочисленный тип.
Если я правильно читал 1С всегда должен передавать параметр по ссылке.
И восьмерка так и делает.
Семерка же как то по другому.
Причем я провел эксперимент.
Я приинциализировал переменную до вызова внешней функции и отображал ее уже внутри dll.
При получении управления эта переменная была равна значению, которое я выбрал для инициализации еще в 1с.
А при потери управления(когда уже произошло взвешивание)равна полученному4 с прибора весу.
Но что раздражает так то что при возвращении в 1с переменная равна тому же значению, которое я выбрал для инициализации.
Как будто они работают с разными переменными.Наверное как то так и есть.
Что такое "потеря управления"? Почему не сделать в DLL функцию вместо процедуры для возврата простого числа?
Так простое число и возвращается.
Это именно функция.По сигнатуре разве не видно?.
Принимает указатель на целочисленное и в него по адресу пишет результат.
Потеря управления-когда завершается работа функции.
"Я всегда думал, что функции выглядят так:
w = Весы.TakeWeight("COM1",9600,0);
"
Читают тему
(гостей: 1)

Быстрый переход