AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 26.12.2006, 13:58   #1  
doo is offline
doo
Участник
 
41 / 10 (1) +
Регистрация: 05.11.2004
Передача агументов в функцию com объекта
есть такой код:

X++:
void init()
{
    COM                    com = new COM("ScCt.cpt");
    str                        data;
    int                        res;
    ;

    res = com.InitComm(1, 1, 0);

    res = com.recordCount(0, 1);

    res = com.LinkTest(data);

    com.closeComm();
}
параметр data как следует из описания функции должен быть строкового типа. но при выполнении данного куска кода возникает ошибка "один или более аргументов не могут быть преобразованы"

может кто знает как с этим бороться?
Старый 26.12.2006, 14:05   #2  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Без описания функции единственное, что могу предположить - необходимо передавать Variant, а не String, т.е. что-то типа
X++:
res = com.LinkTest(ComVariant::CreateFromStr(data));
__________________
Axapta v.3.0 sp5 kr2
Старый 26.12.2006, 14:15   #3  
doo is offline
doo
Участник
 
41 / 10 (1) +
Регистрация: 05.11.2004
описание таково:

LinkTest Проверяет связь с терминалом.

Кроме того метод позволяет определить модель используемого терминала.

Синтаксис вызова LinkTest(<МодельТерминала>)

Параметры <МодельТерминала> Строка.
После успешного вызова метода параметр содержит модель терминала.

Возвращаемое значение Целое.
Старый 26.12.2006, 14:44   #4  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
М-да. Не сильно помогло
А посмотреть Type Library для этого COM-объекта вы можете?
__________________
Axapta v.3.0 sp5 kr2
Старый 26.12.2006, 14:49   #5  
Lucky13 is offline
Lucky13
Участник
1C
 
714 / 198 (8) ++++++
Регистрация: 21.10.2004
Цитата:
Сообщение от doo Посмотреть сообщение
Параметры <МодельТерминала> Строка.
После успешного вызова метода параметр содержит модель терминала.
Может из выше сказанного следует, что параметр - ссылка на строку. Тогда его луче передать как Pointer
Старый 26.12.2006, 14:58   #6  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
2 Lucky13
Это ActiveX - там нет указателей. Максимум - тип BSTR, а он соответствует аксаптовскому str
__________________
Axapta v.3.0 sp5 kr2
Старый 26.12.2006, 15:03   #7  
Lucky13 is offline
Lucky13
Участник
1C
 
714 / 198 (8) ++++++
Регистрация: 21.10.2004
Цитата:
Сообщение от AndyD Посмотреть сообщение
2 Lucky13
Это ActiveX - там нет указателей. Максимум - тип BSTR, а он соответствует аксаптовскому str
Тогда я совсем не понимаю как:
Цитата:
После успешного вызова метода параметр содержит модель терминала.
Как же тогда это значение оттуда забрать, если это не указатель. Тогда высказывание неверно
Старый 26.12.2006, 15:06   #8  
doo is offline
doo
Участник
 
41 / 10 (1) +
Регистрация: 05.11.2004
Цитата:
Сообщение от Lucky13 Посмотреть сообщение
Может из выше сказанного следует, что параметр - ссылка на строку. Тогда его луче передать как Pointer
торможу. можно примитивный пример?
Старый 26.12.2006, 15:08   #9  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
>>>Это ActiveX - там нет указателей

А out параметры?
Старый 26.12.2006, 15:09   #10  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Надо взять oldeView или зареференсить допустим в VBA и посмотреть как оно там будет
За это сообщение автора поблагодарили: AndyD (8).
Старый 26.12.2006, 15:13   #11  
Lucky13 is offline
Lucky13
Участник
1C
 
714 / 198 (8) ++++++
Регистрация: 21.10.2004
Что-то типа:

X++:
Binary data = new Binary(255);
;
res = com.LinkTest(data);

//data.str() содержит результат
Старый 26.12.2006, 15:20   #12  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
2 belugin
О! Точно.
Но в Axapta с ними надо работать не через указатели
X++:
    ComDispFunction funcGet;
    COMVariant varRet;
...
    funcGet = new ComDispFunction(com, "LinkTest", COMDispContext::PropertyGet);
    varRet  = new COMVariant(COMVariantInOut::OUT_RETVAL, COMVariantType::VT_BSTR);
    funcGet.call(varRet);
    data = varRet.bStr();
Где-то так
__________________
Axapta v.3.0 sp5 kr2
Старый 26.12.2006, 15:21   #13  
doo is offline
doo
Участник
 
41 / 10 (1) +
Регистрация: 05.11.2004
зараза. говорит, что метод был вызван с неправильными параметрами...
Старый 26.12.2006, 15:22   #14  
doo is offline
doo
Участник
 
41 / 10 (1) +
Регистрация: 05.11.2004
предидущее было про:

Цитата:
Сообщение от Lucky13 Посмотреть сообщение
Что-то типа:

X++:
Binary data = new Binary(255);
;
res = com.LinkTest(data);

//data.str() содержит результат
Старый 26.12.2006, 15:28   #15  
doo is offline
doo
Участник
 
41 / 10 (1) +
Регистрация: 05.11.2004
to AndyD:

пробовал так. говорит, что требуемый аргумент был опущен )
Старый 26.12.2006, 15:30   #16  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
И все-таки надо смотреть TypeLib
PS. Кстати, а при каком вызове говорит? call()?
__________________
Axapta v.3.0 sp5 kr2

Последний раз редактировалось AndyD; 26.12.2006 в 15:33.
Старый 26.12.2006, 15:32   #17  
doo is offline
doo
Участник
 
41 / 10 (1) +
Регистрация: 05.11.2004
знать бы где...
Старый 26.12.2006, 15:35   #18  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от doo Посмотреть сообщение
знать бы где...
OleView
Старый 26.12.2006, 15:49   #19  
doo is offline
doo
Участник
 
41 / 10 (1) +
Регистрация: 05.11.2004
to AndyD
да. при нём
Старый 26.12.2006, 15:51   #20  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Меня тут мысля посетила.
А не так ли надо вызывать?

data = com.LinkTest();

?
__________________
Axapta v.3.0 sp5 kr2
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Мониторинг состояния COM объекта axaLearner DAX: Программирование 5 10.04.2008 16:39
E-mail в Аксапте 3.0 с помощью CDO.Message COM объекта custtable DAX: Программирование 4 12.02.2008 10:31
Проблема с получение коллекции (массива) из COM-объекта. VES DAX: Программирование 6 24.03.2006 18:59
Передача массива в метод COM-объекта Вадим DAX: Программирование 6 24.01.2005 12:31

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 15:34.