Главная страница
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.033 c
1-25439
Silver_
2003-12-23 17:38
2004.01.09
FastReport - константу из проги


1-25300
Xtz
2003-12-22 22:22
2004.01.09
И Снова TreeView ,помогите разобратся млин уж неделю парюсь


1-25430
NneRreaLl
2003-12-23 19:50
2004.01.09
Насчёт Memo -- можно ли ?


3-25264
NewD
2003-12-10 12:08
2004.01.09
DefaultExpression - не работает судя по всему. Что делать ?


14-25550
deema
2003-12-18 13:41
2004.01.09
МИСТИКА!!!???