Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.01.09;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.011 c
3-25260
Opilki_Inside
2003-12-09 22:13
2004.01.09
Альтернатива DBGrid


1-25442
vasyaVN
2003-12-23 14:33
2004.01.09
Можно ли вообще избежать в TCustomControl отрисовки?


1-25347
Goida
2003-12-22 11:24
2004.01.09
Странно ведет себя Delphi


14-25536
Ega23
2003-12-18 14:29
2004.01.09
Прогноз: Россия - Финляндия?


4-25641
dream
2003-11-06 12:18
2004.01.09
как создать новую форму программно?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский