Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.01.09;
Скачать: CL | DM;

Вниз

Com в dll + Excel   Найти похожие ветки 

 
Романов Р.В. ©   (2003-12-19 14:18) [0]

В dll есть automation object. Из дельфовой программы он вызывается и работет нормально, а из Excel почему то не хочет :((

type
TOduPlan = class(TAutoObject, IOduPlan)
protected
procedure Set_Path(const Value: WideString); safecall;
{ Protected declarations }
end;

implementation

uses ComServ, Dialogs;

procedure TOduPlan.Set_Path(const Value: WideString);
begin
ShowMessage(Value);
end;

initialization
TAutoObjectFactory.Create(ComServer, TOduPlan, Class_OduPlan,
ciMultiInstance, tmApartment);
end.


Вызов из Excel выглядит так
Private Sub CommandButton1_Click()
Dim qw As IOduPlan
Set qw = New IOduPlan
qw.Path = "dd"
Set qw = notfing
End Sub


Непонятно почему при выботе типа qw подсказчик Excelz предлагает тип OduPlan, однако при запуске процедуры выдается ошибка Expected user-defined type, not project.
В данном варианте кода происходит ошибка Invalid use of New keyword в строке
Set qw = New IOduPlan

Что я делаю не так???


 
Ломброзо ©   (2003-12-19 15:19) [1]

А так?
Dim qw As IOduPlan
Set qw = new OduPlan


 
Романов Р.В. ©   (2003-12-22 06:07) [2]


> Ломброзо © (19.12.03 15:19) [1]
> А так?
> Dim qw As IOduPlan
> Set qw = new OduPlan


Выдает ошибку Expected user-defined type, not project.
в строке Set qw = new OduPlan
:(


 
Digitman ©   (2003-12-22 08:25) [3]

а что такое OduPlan ?
если упомянутый выше идентификатор IOduPlan был определен подключением соотв.библ-ки типов при помощи "Сервис->Ссылки ..", то его и надо использовать ! а OduPlan - это, с т.з. Excel , непонятно что такое)


 
Романов Р.В. ©   (2003-12-22 10:55) [4]

Непонятное какое-то явление было.
Dll называлась OduPlan.dll и интерфейс IOduPlan (OduPlan) судя по строке OduPlan = IOduPlan;. Возможно из за этого Excel и запутался. Переделал все заново dll назвал OduObj.dll все заработало.

В старом варианте тоже удалось запустить сервер из excel в таком виде
Set qw = CreateObject("OduPlan.OduPlan")

Имеется еще несколько вопросов.
После удаления объекта Set qw = Nothing, dll остается прицепленой к Excel пока он не будет закрыт. Это нормально или нет?

При при создании Com объекта необходимо создать в нем StringList. Пробовал прописать это в конструктор TOduPlan.Create, но конструктор вроде бы не вызывается?? (пока доконца не разобрался почему. Вроде он не виртуальный у TAutoObject) Наверно создавать внутренние объекты нужно в методе Initialize, а удалять по прежнему во Free?


 
Digitman ©   (2003-12-22 12:36) [5]


> После удаления объекта Set qw = Nothing, dll остается прицепленой
> к Excel пока он не будет закрыт. Это нормально или нет?


нормально


> Наверно создавать внутренние объекты нужно в методе Initialize,
> а удалять по прежнему во Free?


один из надежных способов - перекрыть методы AfterConstruction и BeforeDestruction и в них делать то что тебе нужно



Страницы: 1 вся ветка

Текущий архив: 2004.01.09;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.042 c
14-25558
lipskiy
2003-12-15 02:04
2004.01.09
Эмулятор принтера?


1-25335
vasyaVN
2003-12-22 13:01
2004.01.09
Перерисовка компонента ТCustomControl


6-25480
czuryk
2003-11-02 17:48
2004.01.09
NMPOP3 Как убрать


4-25664
Dmitry___
2003-11-02 18:10
2004.01.09
Определение имени пользователя...


1-25329
Olivka
2003-12-22 16:09
2004.01.09
Fastreport