Форум: "Основная";
Текущий архив: 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