Имя: Пароль:
1C
1C 7.7
v7: Инициализация внешней компоненты под 7-кой
0 max735
 
02.10.11
23:24
Здравствуйте,
Имею свою внешнюю компоненту (написана на C++), под 1СV8 загружается  работает нормально. Сейчас возникла потребность адаптировать по 1СV7.
При загрузке компоненты возникает проблема : отрабатывает метод Init(), затем GetInfo(), затем сразу вываливается в Done().
Понятно, что что-то 7-ке не нравится, но что? (с учетом того, что 8-ка дальше отрабатывает без проблем).В 1С вызываю методом ПодключитьВнешнююКомпоненту(ProgID). В ответ получаю:
ошибка при инициализации объекта из компоненты <Неизвестная компонента>
Прочитал про строку 100 в ресурсах, но после моих манипуляций результат остался тем же. Куда смотреть? Спасибо.
1 andrewks
 
02.10.11
23:42
на диске ИТС есть примеры с исходниками
2 max735
 
02.10.11
23:48
Естественно видел я эти примеры, и вроде бы у меня все написано правильно, только не понятно, почему под 7-кой не работает. Хотелось бы понять, что такого происходит в 7-ке после вызова GetInfo().
3 max735
 
03.10.11
11:57
Может быть это из-за того, что в названии моей компоненты отсутствует "AddIn."?
4 Rie
 
03.10.11
11:59
(0) Покажи текст GetInfo
5 max735
 
03.10.11
12:15
Сейчас вот такой:

STDMETHODIMP AddInObject::GetInfo(SAFEARRAY** pInfo){
   long* pi;
   pi=0;
   VARIANT varVersion;
   V_VT(&varVersion) = VT_I4;
   V_I4(&varVersion) = 2000;
   SafeArrayPutElement(*pInfo,pi,&varVersion);
   return S_OK;
}

Изначально был вот такой:

STDMETHODIMP AddInObject::GetInfo(SAFEARRAY* pInfo){
   VARIANT* varInfo;
   long* pi;
   pi=0;
   varInfo = (VARIANT*)('2000');
   SafeArrayPutElement(pInfo,pi,varInfo);
   return S_OK;
}

Оба варианта в 8-ке отрабатывают нормально.
6 Rie
 
03.10.11
12:42
(5) А что за жестокая конструкция
long* pi;
pi = 0;

Ты в SafeArrayPutElement качестве ссылки на список индексов NULL передаёшь?
7 max735
 
03.10.11
13:18
Большое спасибо, в этом было дело,
поменял на

long inx[1];
inx[0]=0;

SafeArrayPutElement(*pInfo,inx,varInfo);

Заработало. Не понятно только , почему под 8-кой прокатывало.
Еще раз спасибо.
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.