Вход | Регистрация


Информационные технологии ::

Метки:

Как работать с COM ??? (с++)

Я
   kos
 
10.12.03 - 18:36
Собственно проблема вот в чём, пишу плагин, уже всё сделал (я так думаю, что всё), но когда инициализирую форму главной проги выписывается еррор. Писал в BCB 5.

void __fastcall TForm1::Button1Click(TObject *Sender)
{
IVDialerServer *aa;
if(aa->GetMainFormVisible)
   aa->HigeMainForm();

if( (aa->GetMainFormVisible))
ShowMessage("sfsdf ERRRORRRR!!");
}

Выкидывает на строки
TOLEBOOL __fastcall get_GetMainFormVisible(void)
 {
   TOLEBOOL Value;
>>>>>>>>    OLECHECK(this->get_GetMainFormVisible((TOLEBOOL*)&Value));
   return Value;
 }

__
а на VB всё делается очень быстро как в детском саду :(
 
  Рекламное место пустует
   skunk
 
1 - 10.12.03 - 19:53
ты на мыло проект сбрось так трудно въехать
   kos
 
2 - 10.12.03 - 20:14
Я с COM впервые столкнулся, а нормальной инфы не нашел :(  Смотри пример на VB. Надо примерно тоже самое только на С++
______
письмо отправил
   kos
 
3 - 10.12.03 - 20:19
OLECHECK(this->get_GetMainFormVisible((TOLEBOOL*)&Value));
Трындец, ещё и к типу приводят. Ка-ра-ул.
   skunk
 
4 - 11.12.03 - 00:53
kos тут из текста не видна регистрируешь COM как класс и многое другое.
вот сылка посмотри там подробно и на С++ правда от MS но мне сильно помогло
http://www.rsdn.ru/article/com/COMvs.xml
   skunk
 
5 - 11.12.03 - 01:06
опс, мыло получил.
   skunk
 
6 - 11.12.03 - 15:19
kos, ты где. мыло глянь тебе это надо или нет.
   kos
 
7 - 11.12.03 - 18:41
Спасибо конечно, но не могу ни как забрать :(
   skunk
 
8 - 11.12.03 - 18:47
не понял, что и откуда забрать
   kos
 
9 - 11.12.03 - 18:50
Что там было? Может поменьше вышлешь до 0,5М
   skunk
 
10 - 11.12.03 - 18:57
//--------------------------
#include <vcl.h>
#pragma hdrstop
 #include "VDialer3_TLB.h"
#include "main.h"
//--------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
Variant Serv;
//--------------------------
void __fastcall TimeOut(int t)
{
 short i, y;
 i = int(t/10);
 for (y; i; 1)
     Serv.OleFunction("SleepTime");
}

//--------------------------
void __fastcall StartDial(void)
{
 TimeOut(2);
 Serv.OleFunction("HigeMainForm");
}

//--------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
       : TForm(Owner)
{
 Serv = CreateOleObject("VDialer3.VDialerServer");
 Serv.OleFunction("HigeMainForm");
 StartDial();
}
//--------------------------



это main.cpp, актвация приложения VDialer3
 
 
   skunk
 
11 - 11.12.03 - 18:59
я правильно понял или как
   kos
 
12 - 11.12.03 - 19:14
Крут! Большое спасибо!
А зачем TimeOut(int t), какова её роль? Заранее приношу извинение за идиотский вопрос.

___
А то что я тебе прислал, там правильно было сделано? СОМ объекты так подключаются?
   skunk
 
13 - 11.12.03 - 19:24
если честно то я фиг его знает. Дает какуюто задержку. Просто в примере на VB стояла поэнтому я воткнул. Просто я засомневался, что не правильно вопрос понял. Сперва я подумал, что ты ищещь как делать COM объект, а в том что ты преслал был пример как управлять им. Думал я наверное чето загнал.
   kos
 
14 - 11.12.03 - 19:38
Как делаются приложения с поддержкой COM?
Что лучше COM или ActiveX (по моему это примерно одно и тоже, а вот отличий не знаю :(    )????  Я вообще не рублю в этих вещах, но хотел бы узнать.
   skunk
 
15 - 11.12.03 - 19:50
COM - это не язык программирования, а подход (спецификация) к созданию программ, обеспечивающий взаимодействие программ любых типов. Компоненты COM объединяются друг с другом для создания приложений или систем компонентов. Компоненты можно менять во время выполнения, без перекомпиляции или перекомпоновки приложения. COM - это основа, на которой построены такие технологии Microsoft, как ActiveX, DirectX и OLE.

Цитата из умных книжек.
   skunk
 
16 - 11.12.03 - 19:52
Говря по русский набор различных кирпичиков с помощью которых можно реализовать взаимодествие приложений работающих в разных системах, разработаных на разных языках для взаимодействия с друг дгургом.
   skunk
 
17 - 11.12.03 - 19:57
ActiveX - технология создания приложений на основе СОМ. Спецификация управляющих элементов ActiveX определяет четыре основных аспекта их функционирования: обеспечение пользовательского интерфейса, обеспечение вызова методов управляющего элемента контейнером, посылка событий контейнеру, получение информации о свойствах среды контейнера и обеспечение доступа к свойствам управляющего элемента и их модификации.

Опять же цитата
   kos
 
18 - 11.12.03 - 20:03
Что такое ActiveX
Технология ActiveX, рассматриваемая в данной статье, базируется на технологии Microsoft COM (Component Object Model - модель компонентных объектов), позволяющей создавать и использовать программные компоненты, предоставляющие различные сервисы другим приложениям, компонентам и операционной системе. COM представляет собой одну из реализаций концепции распределенных вычислений, базирующейся в общем случае на предоставлении возможности приложениям использовать для расширения своей функциональности готовые компоненты и объекты (иногда они называются сервисами). Технология COM позволяет использовать объектно-ориентированный подход не в рамках одного приложения, а в рамках операционной системы, но, в отличие от стандартных классов, определенных в исходном тексте и реализуемых как объекты в адресном пространстве одного процесса, эти компоненты могут в общем случае располагаться в адресных пространствах разных процессов и даже на разных компьютерах.

В настоящее время существуют три типа спецификаций COM, определенных Microsoft и включающих большое количество интерфейсов и функций:

OLE-документы - составные документы, содержащие внедренные или связанные объекты. Эта спецификация описывает правила создания контейнеров для таких документов с "активацией по месту". Отметим, что компонент OLEContainer Delphi и C++Builder создан с учетом этой спецификации (этой теме будет посвящена одна из следующих статей данного цикла).
OLE Automation. Эта спецификация описывает, как создать сервер и контроллер, управляющий его поведением с помощью скриптов или макросов. Эта спецификация также поддерживается Delphi и C++Builder (об этом также пойдет речь в ближайших статьях данного цикла).
Управляющие элементы ActiveX, использующие специальный вариант протокола Automation (о них-то и пойдет речь в данной статье).
Использование COM, и, в частности, технологии ActiveX, позволяет обеспечить создание приложений, собираемых из готовых компонентов - элементов управления ActiveX, отличающееся от привычной пользователям C++Builder или Delphi разработки приложений с помощью VCL-компонентов тем, что такая "сборка" не зависит от того, на каком языке написаны как готовые компоненты, так и использующее их приложение - лишь бы средство разработки поддерживало возможность использования таких компонентов в разрабатываемом приложении (такое приложение обычно называется контейнером).

Элементы управления ActiveX представляют собой библиотеки, содержащие исполняемый код. Как было сказано выше, эти библиотеки могут быть использованы в различных приложениях как встроенные элементы управления, поэтому они обладают свойствами, событиями и методами, доступными посредством автоматизации. Современные средства разработки, как правило, позволяют включать такие элементы в создаваемые с их помощью приложения. Помимо этого, элементы управления ActiveX нередко используются в качестве расширений web-броузеров с целью придания им дополнительной функциональности, например, для отображения документов, отличных от поддерживаемых данным броузером.

Как любой COM-сервер, элемент управления ActiveX обладает уникальным идентификатором GUID и должен быть зарегистрирован в реестре. На основании этой записи может быть осуществлен поиск местоположения файла с расширением *.ocx, содержащего его реализацию.

Таким образом, создав элемент управления ActiveX, обладающий интересующей Вас функциональностью, Вы можете в дальнейшем позволить его пользователям встраивать этот элемент в свои приложения (например, написанные на Visual Basic, PowerBuilder, Delphi, C++Builder и др.), отображать его в web-броузере в составе выгруженной с Вашего web-сервера HTML-страницы, включать его в состав документов MS Office, при этом Вы не обязаны предоставлять исходный текст этого компонента.

Когда следует создавать управляющие элементы ActiveX? Естественно, в тех случаях, когда функциональность, содержащаяся в таком элементе, уникальна. Нет смысла создавать ActiveX, реализующий функциональность кнопки или текстового редактора - таких элементов управления, в том числе выполненных в виде ActiveX, на рынке готовых компонентов более чем достаточно. Нет смысла также создавать ActiveX, если он будет использоваться только в C++Builder - в этом случае проще создать VCL-компонент, который будет работать в использующем его приложении значительно быстрее, чем аналогичный ActiveX. Но создание элемента управления, реализующего, к примеру, часть автоматизированного рабочего места какой-либо категории сотрудников Вашего предприятия может в ряде случаев оказаться весьма полезным, особенно в следующих двух случаях. Первый случай - использование на предприятии различных средств разработки, например, C++Builder и Visual Basic; в этом случае разработчик, использующий Visual Basic, может встраивать в свои приложения ActiveX, созданный другим разработчиком и реализующий какую-либо функциональность, используемую несколькими различными автоматизированными рабочими местами. Второй случай - широкое использование Internet или intranet при автоматизации предприятия. В этом случае ActiveX, реализующий подобную функциональность, может быть встроен в HTML-страницу и отображен в web-броузере. Такой подход существенно облегчает решение проблемы обновления версий автоматизированных рабочих мест, так как вместо установки новых версий на рабочих станциях достаточно заменить один экземпляр ActiveX, хранящийся на web-сервере. Наиболее ярким примером такого подхода может быть выполненный в виде ActiveX "тонкий" клиент, получающий данные от удаленного сервера приложений, являющегося, в свою очередь, клиентом серверной СУБД.

Такой набор преимуществ сделал эту технологию за последние два года весьма популярной, и именно поэтому многие современные средства разработки, такие, как Delphi или С++Builder, позволяют создавать элементы управления ActiveX. Эти средства обычно имеют встроенные механизмы поддержки спецификации ActiveX с помощью автоматической генерации соответствующего кода (хотя, конечно, не возбраняется писать подобный код вручную).

Спецификация ActiveX представляет собой набор правил (а именно описание стандартных интерфейсов), с помощью которых следует создавать такие элементы управления. Отметим, что текущая версия этой спецификации учитывает возможность использования в качестве контейнера web-броузеров и необходимость загрузки элементов ActiveX с удаленных web-серверов с их автоматической регистрацией.
____
Теперь я думаю всем всё станет ясно :)
http://youlibrary.by.ru/Books/Programms/ActiveX/Make_ActiveX/index.html
   skunk
 
19 - 11.12.03 - 20:08
У меня есть пару статей, давно выкачавал, так на всякий случай. линков не поню. если надо могу замылить
   kos
 
20 - 11.12.03 - 20:08
вот тоже не плохая статья по этим штукам http://www.rxlib.ru/Stat/elm_actx/actx.htm
   kos
 
21 - 11.12.03 - 20:11
Спасибо, но ты мне лучше линки дай, а то у меня почта из вон плохо работает :(    но всё равно большое спасибо.
   skunk
 
22 - 11.12.03 - 20:11
у нее продолжее где то есть, как раз по твоему вопросу как управлять из другой прогаммы COM
   skunk
 
23 - 11.12.03 - 20:13
можешь на www.comprice.ru покапаться там то же есть ряд статей нва эту тему, по крайне мере был.
   skunk
 
24 - 11.12.03 - 20:15
http://www.infocity.kiev.ua/mprog.html
тоже много полезного для с++
   BigLeha
25 - 14.12.03 - 09:23
Привет. Может вопрос не в тему, но может кто знает, как мне работать с Excel из CBuilder 5 ???
Мне надо следующее:
1. Подключиться
2. Получить значение формуля из ячейки с определенным номером.

Я пишу что-то типа:
Variant ExcelAp = CreateObject("Excel.Application");
ExcelAp.Open("C:\12345.xls");
Edit1->Text = Excel.Cells(1,2).Formula;

Но у меня ничего не получается.... :(
Пишет, что тип Variant не имеет функции Cells, а тем более - формулы.....

Помогите, плз......
Спасибо.

ЗЫ Пробовал и Excel.AddIn, но не помогло.... :)
   skunk
 
26 - 14.12.03 - 10:30
Для начала определяешь какой сервер использовать для этого смотришь в реестре
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Excel.Application\CurVer значение "по умолчанию" у меня это "Excel.Application.9"

После чего запускаешь Builder и в нем File - Open. В диалоге выбераешь путь до папки где у тебя стоит Excel, тип файла "Type Library",  сам файл Excel9.old. Номер в файле берется из версии, то есть если у тебя будет "Excel.Application.8" то файл Excel8.old

Он(Builder) тебе покажет все что ты сможешь сделать с данным COM объектом.

Для получения значения из COM объекта используется функция OlePropertyGet(), для установки OlePropertySet(), для выполнения функций OleFunction() и процедур OleProcedure()

далее код приблизительно такой
Для подключения
Excel = CreateOleObject("Excel.Application.9");

Для получения значения ячейки с номером

WB = Excel.OlePropertyGet("Workbooks");
It = WB.OlePropertyGet("Item",1);
Rezult = It.OlePropertyGet("Cells").OlePropertyGet("Item", i, 1).OlePropertySet("Value", 1);



Список тем форума
Рекламное место пустует   Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Ветка сдана в архив. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует