COM/ActiveX объекты на Clarion?
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
-
- Ветеран
- Сообщения: 333
- Зарегистрирован: 21 Сентябрь 2005, 11:05
- Откуда: Нижний Новгород
- Контактная информация:
COM/ActiveX объекты на Clarion?
Всем привет!
Можно ли на Clarion реализовать сабж?
Интерес пока носит теоретический характер. Например, создать dll, в которой будет реализация COM или ActiveX объекта, который затем можно вставить в приложение на Клаше или не на Клаше.
Есть ли у кого наработки/примеры и возможность ими поделиться?
Можно ли на Clarion реализовать сабж?
Интерес пока носит теоретический характер. Например, создать dll, в которой будет реализация COM или ActiveX объекта, который затем можно вставить в приложение на Клаше или не на Клаше.
Есть ли у кого наработки/примеры и возможность ими поделиться?
- ingasoftplus
- Ветеран
- Сообщения: 464
- Зарегистрирован: 26 Декабрь 2006, 17:07
- Откуда: Оттуда :)
- Благодарил (а): 124 раза
- Поблагодарили: 6 раз
- Игорь Столяров
- Ветеран движения
- Сообщения: 8035
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 96 раз
-
- Ветеран
- Сообщения: 333
- Зарегистрирован: 21 Сентябрь 2005, 11:05
- Откуда: Нижний Новгород
- Контактная информация:
Всем привет!
Попробовал я собрать пример на основании статьи, предложеной выше. Он конечно же работает. Решил подключить тестовый пример к 1С (одна из возможных сфер применения). Не получилось, да сообственно и не должно было, у них есть особые требования к подключению внешних компонент.
Первое требование: наличие интерфейса IInitDone, наследованного от IUnknown и три метода в нем Init, Done, GetInfo.
Попытался реализовать, 1С его не видит.
Попробовал реализовать этот пример на EasyCOMCreator. Триал версия вроде как позволяет собрать такой простенький пример.
Пример получился побольше размером, оказалось что он еще и tlb файл генерит и в реестр побольше инфы об объекте пишет.
Но в 1С все равно не подключается
Уже не знаю куда копать, может кто подскажет?
1С77, Clarion6_9057
Ошибка:
Попробовал я собрать пример на основании статьи, предложеной выше. Он конечно же работает. Решил подключить тестовый пример к 1С (одна из возможных сфер применения). Не получилось, да сообственно и не должно было, у них есть особые требования к подключению внешних компонент.
Первое требование: наличие интерфейса IInitDone, наследованного от IUnknown и три метода в нем Init, Done, GetInfo.
Попытался реализовать, 1С его не видит.
Попробовал реализовать этот пример на EasyCOMCreator. Триал версия вроде как позволяет собрать такой простенький пример.
Пример получился побольше размером, оказалось что он еще и tlb файл генерит и в реестр побольше инфы об объекте пишет.
Но в 1С все равно не подключается

Уже не знаю куда копать, может кто подскажет?
1С77, Clarion6_9057
Ошибка:
Код: Выделить всё
Ошибка при создании объекта из компоненты <Неизвестная компонента> (отсутствует интерфейс IInitDone)
-
- Ветеран
- Сообщения: 333
- Зарегистрирован: 21 Сентябрь 2005, 11:05
- Откуда: Нижний Новгород
- Контактная информация:
Немного продвинулся. 
Нашел еще одно требование: GUID интерфейса IInitDone должен быть {AB634001-F13D-11D0-A459-004095E1DAEA}
Правда немного продвинулся, но это похоже связано с другими требованиями, которые я еще не выполнил.
Если у кого есть опыт работы с 1С через COM, или опыт написания ВК для 1С, просьба помочь...

Нашел еще одно требование: GUID интерфейса IInitDone должен быть {AB634001-F13D-11D0-A459-004095E1DAEA}
Правда немного продвинулся, но это похоже связано с другими требованиями, которые я еще не выполнил.
Если у кого есть опыт работы с 1С через COM, или опыт написания ВК для 1С, просьба помочь...
-
- Ветеран
- Сообщения: 333
- Зарегистрирован: 21 Сентябрь 2005, 11:05
- Откуда: Нижний Новгород
- Контактная информация:
Кто-нибудь знает как реализовать эту функцию на Clarion?
Код: Выделить всё
STDMETHODIMP CAddIn::GetInfo(SAFEARRAY **pInfo)
{
// Component should put supported component technology version
// in VARIANT at index 0
long lInd = 0;
VARIANT varVersion;
V_VT(&varVersion) = VT_I4;
// This component supports 1.0 version
V_I4(&varVersion) = 1000;
SafeArrayPutElement(*pInfo,&lInd,&varVersion);
return S_OK;
}
- Дед Пахом
- Старичок
- Сообщения: 3289
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 15 раз
- Поблагодарили: 49 раз
- Контактная информация:
Что-нибудь вроде этого
Код: Выделить всё
GetInfo PROCEDURE(LONG pInfo)
varVersion VARIANT
gvarVersion LIKE(gVariant),OVER(varVersion)
lInd LONG
CODE
varVersion = 1000
SafeArrayPutElement(pInfo,ADDRESS(lInd),ADDRESS(gvarVersion))
RETURN S_OK
С уважением, ДП
-
- Ветеран
- Сообщения: 333
- Зарегистрирован: 21 Сентябрь 2005, 11:05
- Откуда: Нижний Новгород
- Контактная информация:
А с этой функцией как быть?
Описание:
В переменную pExtensionName помещается наименование расширения. Память для строки выделяется объектом компоненты стандартными системными функциями для работы с OLE-строками (например, SysAllocString. 1C:Предприятие освобождает эту память вызовом SysFreeString)
Код: Выделить всё
STDMETHODIMP CAddIn::RegisterExtensionAs(BSTR *pExtensionName)
{
// Name of extension should be changed avoiding conflicts
CString csExtenderName = "AddInExtension";
*pExtensionName = csExtenderName.AllocSysString();
return S_OK;
}
В переменную pExtensionName помещается наименование расширения. Память для строки выделяется объектом компоненты стандартными системными функциями для работы с OLE-строками (например, SysAllocString. 1C:Предприятие освобождает эту память вызовом SysFreeString)
- Дед Пахом
- Старичок
- Сообщения: 3289
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 15 раз
- Поблагодарили: 49 раз
- Контактная информация:
Попробуй
Код: Выделить всё
RegisterExtensionAs PROCEDURE(*BSTRING pExtensionName)
CODE
pExtensionName = "AddInExtension"
RETURN S_OK
С уважением, ДП
-
- Ветеран
- Сообщения: 333
- Зарегистрирован: 21 Сентябрь 2005, 11:05
- Откуда: Нижний Новгород
- Контактная информация:
Пробовал, не работает. Мне кажется нужно что-то типа:
естественно не компилится
Код: Выделить всё
program
map
test1(*long qq_)
end
qq &long
code
test1(qq)
test1 procedure(*long qq_)
code
qq_ &= new(long)
- Дед Пахом
- Старичок
- Сообщения: 3289
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 15 раз
- Поблагодарили: 49 раз
- Контактная информация:
А так работает?
Код: Выделить всё
program
map
RegisterExtensionAs(*BSTRING pExtensionName)
end
bstrExtensionName bstring
ExtensionName string(256)
code
RegisterExtensionAs(bstrExtensionName)
ExtensionName = bstrExtensionName
message(ExtensionName)
RegisterExtensionAs PROCEDURE(*BSTRING pExtensionName)
CODE
pExtensionName = 'AddInExtension'
С уважением, ДП
- morkovin
- Ветеран
- Сообщения: 935
- Зарегистрирован: 20 Июль 2005, 14:53
- Откуда: Volgograd, Russia
- Благодарил (а): 9 раз
- Поблагодарили: 4 раза
- Контактная информация:
Re:
Так получилось или нет? есть примерчик?ru_alex писал(а): Все заработало, dll к 1С подключил.
Буду пробовать методы вызывать.
WBR, morkovin