Главная страница
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.03 c
11-25268
tamerlan311
2003-04-14 00:29
2004.01.09
Форум


6-25469
lkj
2003-11-07 13:45
2004.01.09
Кодинг сокетов юзая winsock в Дэлфи


3-25195
Gamar
2003-12-12 07:28
2004.01.09
Обновить быстро


1-25381
Den_PY
2003-12-25 07:24
2004.01.09
Socket


1-25372
-=DeMoH=-
2003-12-23 15:12
2004.01.09
Кто знаком с мат.статистикой?