![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Не хочет работать 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".