Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Не хочет работать COM DLL [D6]


MV-GROB ©   (2003-01-13 12:10:00) 

Сделал COM DLL . В клиенте написаном на Д6 - работает, а в другом (1с СоздатьОбъект(имя_dll.имя_класса)) - не хочет Посоветуйте плиз чего небудь.


MV-GROB   (2003-01-13 17:01:00) [1]

michel@group-hitek.ru
и
hitek@redline.ru
Буду очень признателен


Петров Денис   (2003-01-13 16:44:00) [2]

Ну, разве что прислать по e-mail...


MV-GROB   (2003-01-13 16:23:00) [3]

Петров Денис
А ссылочки на енти доки Е?


Петров Денис   (2003-01-13 15:37:00) [4]

MV-GROB>> В "1С" версии 7.5 ЕСТЬ функция "ЗагрузитьВнешнююКомпоненту"! Я больше чем уверен в этом.

Но, все-таки, работать в "1С" с COM-серверами лучше через формат ейных внешних компонент, а не просто через OLE Automation.
Например, если работаешь через внешнюю компоненту, то, как миинимум, сразу видно два преимущества:
1. Работает метод ЗагрузитьВнешнююКомпоненту. У него есть одна приятная фича: даже если COM-сервер не зарегистрирован, то она его зарегит перед подключением.
2. Становится доступна работа со страницей свойств COM-сервера. То есть, появляется возможность настройки компоненты пользователем.

В рамках этого форума сложно описть технологию создания внешних компонент для "1С", но, вообще-то есть доки на это.


Romkin   (2003-01-13 15:23:00) [5]

Всегда. Если хочешь, чтобы была функция, установи еще один параметр и дай ему опцию [out,retval] - в паскале safecall отобразит как функцию, вызов из 1С - такой же


MV-GROB   (2003-01-13 15:22:00) [6]

type
TCoSam = class(TAutoObject, ICoSam)
protected
procedure LenSam(Param1: Integer); safecall;
Function FLSsam(Param1: Integer)HRESULT; safecall;
{ Protected declarations }
end;

implementation

uses ComServ;

procedure TCoSam.LenSam(Param1: Integer);
begin
Param1:=Param1*Param1;
end;

Function TCoSam.FLSsam(Param1: Integer)HRESULT;
begin
result:=HRESULT(Param1*Param1);
end;


neXt   (2003-01-13 15:20:00) [7]

мы все его хочем


MV-GROB   (2003-01-13 15:17:00) [8]

Сделал, работает СПАСИБО.
Но Automation object почему - то хочет тип HRESULT.


Romkin   (2003-01-13 15:06:00) [9]

Тебе пытаются сказать, что в wizarde надо было указать Automation object, а не com object


MV-GROB   (2003-01-13 14:37:00) [10]

У меня 1с 75. В ней отсутствует "ЗагрузитьВнешнююКомпоненту", если можно поподробней


Петров Денис   (2003-01-13 12:41:00) [11]

Если используешь функцию "СоздатьОбъект", то создаваемый объект должен быть:
а) типа OLE Automation, т. е. должен быть унаследован от IDispatch;
б) твой OLE-сервер должен быть зарегистрирован в системе до вызова "СоздатьОбъект".

Таким способом "1С" может работать, например, с Windows Media Player.

Есть другой способ работы в "1С" с COM-серверами. Они могут оформляться как внешние компоненты "1С", тогда "1С" работает с ними несколько иначе (через специфические только для "1С" интерфейсы). Эти объекты в первой части ProgID всегда имеют строку "addin" (в справке "1С" посмотри функцию ЗагрузитьВнешнююКомпоненту).


neXt   (2003-01-13 12:28:00) [12]

тогда по пробуйте добавить COM-объект в библиотеку как "Automation Object", хуже не будет


MV-GROB   (2003-01-13 12:26:00) [13]

neXt
Если чесно я не знаю, но например Прподключение ADO происходит так:
СоздатьОбъект(ADODB.Command)

Excel :
СоздатьОбъект(Excel.Application)
Я первый раз COM DLL использую


neXt   (2003-01-13 12:17:00) [14]

COM объект в библиотеку добавлен как "COM Object" или как "Automation Object"?
Просто если 1С использует "позднее связывание" (я просто не в курсе, как он взаимодействует с COM), то нужно б "Automation Object".


Наверх

Титульная страница Поиск, карта сайта Написать письмо