Страница 1 из 1
COM объект не виден из С6
Добавлено: 07 Май 2010, 23:06
seawolf
Уважаемые коллеги,
Порекомендовали мне тут набор Com объектов (платный) для обработки почты (пока интересует SMTP отправка с поддержкой SSL ).
Сходил на сайт
http://www.quiksoft.com/ взял это дело (благо есть период trial). Отсетапил, нашел кучку dll почитав доку зарегистрировал через regsvr32. И пошел в C6.3 И вызвал функцию OLEDirectory и .... не обнаружил данных объектов в списках (прыгал вокруг нее согласно доки но этого объекта нет зато куча остальных). В реестре такой объект появился у него есть GUID и все что полагается. Libmaker видит четыре стандартные для com объектов функции регистрации и удаления. Хочу спросить или я чего-то недопонял или не все com объекты доступны в clarion через OLE/OCX (что очень странно если их создают для использования здесь).
PS. Конечно есть еще catalyst, но там надо возиться писаниной, а здесь десять строк кода и письмо ушло.
Re: COM объект не виден из С6
Добавлено: 08 Май 2010, 0:57
WadimZapara
Вообще-то, COM <> OLE и COM <> OCX
Поэтому в OLEDirectory его и нету. Но заюзать можно (наверное). А проверять наличие - 1-ый пришедший на ум вариант - через реестр.
Re: COM объект не виден из С6
Добавлено: 08 Май 2010, 8:41
seawolf
А чем его заюзать попробовать? Нужно что-то особенное?
Re: COM объект не виден из С6
Добавлено: 08 Май 2010, 9:51
Дед Пахом
В оконной процедуре где угодно, но после открытия окна:
Код: Выделить всё
OleCtrl = CREATE(0,CREATE:OLE)
OleCtrl{prop:create} = ProgId
! или если есть лицензионный ключ
! OleCtrl{prop:create} = CLIP(ProgId) & '\!' & CLIP(LicenseKey)
Re: COM объект не виден из С6
Добавлено: 11 Май 2010, 12:57
seawolf
В том -то и дело что так не идет. Если объект виден из OleDirectory то работает (объект заданный по ProgID создается). А так вытаскиваем ProgID из реестра вручную далее его пишем в ProgID и объекта нет. По доке написано что ключ не нужен в течении 20 дней (период триал). Строки кода даже в фокспро элементарны (sample есть), получается что мы не можем использовать все подряд com объекты в clarion? И еще если задаем левый ProgID то как отследить создался он или нет. Ловить EasyMailHandle бесполезно.
EasyMailHandle = Create(0,create:ole)
ProgID = 'EasyMail.SMTP'
EasyMailHandle{prop:create}=ProgID
Re: COM объект не виден из С6
Добавлено: 11 Май 2010, 13:58
Дед Пахом
Не говорите ерунды - если комок нормальный и создаётся без проблем в, скажем VBScript, то он без тех же проблем создастся и в Clarion именно так, как я писал выше. Проверьте ProgId (проверяйте по реестру, она может быть чуть хитрее, типа 'EasyMail.SMTP.254'). Проверьте, что OLE-контрол создаётся уже после открытия окна. Ещё что-нибудь проверьте

Re: COM объект не виден из С6
Добавлено: 12 Май 2010, 0:13
WadimZapara
Даже в примерах на сайте разработчика видно такое использование:
CreateObject("EasyMail.SMTP.6")
(в примерах ветки
Samples > EasyMail Objects > ASP: "Send a HTML Message Using the SMTP Object", "Send a Message Using the SMTP Object with Attachments", "Send a Message Using the SMTP Object - Imports text from a system file into the message body.", "Send a Message with ESMTP extensions", "Error Handing for the SMTP Send() Method")
(Встречаются куски кода:
CreateOleObject('EasyMail.POP3.6'),
CreateObject("EasyMail.IMAP4.6"),
<CFOBJECT ACTION="Create" NAME="SMTP" CLASS="EasyMail.SMTP.6">,
$code = Win32::OLECreateObject('EasyMail.SMTP.6',$SMTP)
Если не получилось использование EasyMail.SMTP, почему было не испытать EasyMail.SMTP.6 ?

Re: COM объект не виден из С6
Добавлено: 12 Май 2010, 1:24
WadimZapara
Дед Пахом писал(а):Не говорите ерунды - если комок нормальный и создаётся без проблем в, скажем VBScript, то он без тех же проблем создастся и в Clarion

Может быть Вы и правы, может у меня руки кривые...
Но попробуйте выполнить аналог следующего кода, который полностью работает, например в макросах EXCEL, но не хочет из-под Клары, или работает местами:
Код: Выделить всё
Set AD=CreateObject("ADSystemInfo")
CALL MsgBox "This Computer Name in Active Directory is " & AD.ComputerName
CALL MsgBox "My name is " & AD.UserName
CALL MsgBox "My Domain name is " & AD.DomainDNSName & " or " & AD.DomainShortName
Только, пожалуйста, попробуйте этот код на Win2000-Pro, WinXP, Win-98 (с установленным клиентом AD). У меня из-под VB - всё на всех ОС ок. А из-под Клары - "индейский домик" - фиг вам (т.е., кроме XP - под ней всё ок).
Объясните, где кривизна моих рук или что есть "ерунда".
P.S. По указанной причине пришлось идти другим путём...
Re: COM объект не виден из С6
Добавлено: 12 Май 2010, 8:39
Дед Пахом
Вадим,
я не буду ставить у себя ни 2К, ни XP, ни даже Win98, и не уговаривайте!
А если серьёзно, то во времена Win98 Клара была ещё маленькой (5.5 в лучшем случае). И работать она умела только с OLE.
PS
С Active Directory я немного возился - генерил классы с помощью EasyCOM2INC, делал программку чтения списка юзеров, всё работало как часы.
Re: COM объект не виден из С6
Добавлено: 13 Май 2010, 0:34
WadimZapara
Спасибо, дружище, за ответ!
А не похож ли Ваш постскриптум на поговорку: "Гречневая каша себя хвалит!"
Может, и коды льготной (читай бесплатной) регистрации на EasyCOM2INC предложишь (может мылом - у меня на рамблере) ?
Был бы благодарен...
(Знаешь, служу в УВД области. Для него, родного, и пишу программы. Денег на ПО - не выбить. Потому приходится всё самому да самому...
Или побираться.

Олег Руденко, например, мне помог. Спасибо ему.)
Re: COM объект не виден из С6
Добавлено: 13 Май 2010, 7:15
Дед Пахом
WadimZapara писал(а):
Может, и коды льготной (читай бесплатной) регистрации на EasyCOM2INC предложишь (может мылом - у меня на рамблере) ?
Да легко. Мне только нужен Send code (Help -> Registration). Почта "mikeduglas @@@@ yandex.ru"
Re: COM объект не виден из С6
Добавлено: 13 Май 2010, 21:19
WadimZapara
Спасибо, Михаил.