Главная страница
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.02 c
11-25269
Дмитрий С
2003-04-18 06:56
2004.01.09
TKOLToolBar


1-25276
bestix
2003-12-23 15:14
2004.01.09
ComboBox+TreeView


14-25524
NeyroSpace
2003-12-19 15:42
2004.01.09
Что с принтером (или с LPT портом)?


14-25517
Jih
2003-12-16 00:15
2004.01.09
Нужна база на interbase


14-25515
vuk
2003-12-15 18:34
2004.01.09
Мыло для веревок.