Текущий архив: 2003.01.23;
Скачать: CL | DM;
Вниз
Не хочет работать COM DLL Найти похожие ветки
← →
MV-GROB © (2003-01-13 12:10) [0]Сделал COM DLL . В клиенте написаном на Д6 - работает, а в другом (1с СоздатьОбъект(имя_dll.имя_класса)) - не хочет Посоветуйте плиз чего небудь.
← →
neXt © (2003-01-13 12:17) [1]COM объект в библиотеку добавлен как "COM Object" или как "Automation Object"?
Просто если 1С использует "позднее связывание" (я просто не в курсе, как он взаимодействует с COM), то нужно б "Automation Object".
← →
MV-GROB © (2003-01-13 12:26) [2]neXt
Если чесно я не знаю, но например Прподключение ADO происходит так:
СоздатьОбъект(ADODB.Command)
Excel :
СоздатьОбъект(Excel.Application)
Я первый раз COM DLL использую
← →
neXt © (2003-01-13 12:28) [3]тогда по пробуйте добавить COM-объект в библиотеку как "Automation Object", хуже не будет
← →
Петров Денис © (2003-01-13 12:41) [4]Если используешь функцию "СоздатьОбъект", то создаваемый объект должен быть:
а) типа OLE Automation, т. е. должен быть унаследован от IDispatch;
б) твой OLE-сервер должен быть зарегистрирован в системе до вызова "СоздатьОбъект".
Таким способом "1С" может работать, например, с Windows Media Player.
Есть другой способ работы в "1С" с COM-серверами. Они могут оформляться как внешние компоненты "1С", тогда "1С" работает с ними несколько иначе (через специфические только для "1С" интерфейсы). Эти объекты в первой части ProgID всегда имеют строку "addin" (в справке "1С" посмотри функцию ЗагрузитьВнешнююКомпоненту).
← →
MV-GROB © (2003-01-13 14:37) [5]У меня 1с 75. В ней отсутствует "ЗагрузитьВнешнююКомпоненту", если можно поподробней
← →
Romkin © (2003-01-13 15:06) [6]Тебе пытаются сказать, что в wizarde надо было указать Automation object, а не com object
← →
MV-GROB © (2003-01-13 15:17) [7]Сделал, работает СПАСИБО.
Но Automation object почему - то хочет тип HRESULT.
← →
neXt © (2003-01-13 15:20) [8]мы все его хочем
← →
MV-GROB © (2003-01-13 15:22) [9]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;
← →
Romkin © (2003-01-13 15:23) [10]Всегда. Если хочешь, чтобы была функция, установи еще один параметр и дай ему опцию [out,retval] - в паскале safecall отобразит как функцию, вызов из 1С - такой же
← →
Петров Денис © (2003-01-13 15:37) [11]MV-GROB>> В "1С" версии 7.5 ЕСТЬ функция "ЗагрузитьВнешнююКомпоненту"! Я больше чем уверен в этом.
Но, все-таки, работать в "1С" с COM-серверами лучше через формат ейных внешних компонент, а не просто через OLE Automation.
Например, если работаешь через внешнюю компоненту, то, как миинимум, сразу видно два преимущества:
1. Работает метод ЗагрузитьВнешнююКомпоненту. У него есть одна приятная фича: даже если COM-сервер не зарегистрирован, то она его зарегит перед подключением.
2. Становится доступна работа со страницей свойств COM-сервера. То есть, появляется возможность настройки компоненты пользователем.
В рамках этого форума сложно описть технологию создания внешних компонент для "1С", но, вообще-то есть доки на это.
← →
MV-GROB © (2003-01-13 16:23) [12]Петров Денис
А ссылочки на енти доки Е?
← →
Петров Денис © (2003-01-13 16:44) [13]Ну, разве что прислать по e-mail...
← →
MV-GROB © (2003-01-13 17:01) [14]michel@group-hitek.ru
и
hitek@redline.ru
Буду очень признателен
Страницы: 1 вся ветка
Текущий архив: 2003.01.23;
Скачать: CL | DM;
Память: 0.49 MB
Время: 0.013 c