Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

События ActiveX [D6, Win2k]


DinoRay ©   (2004-04-21 11:28:00) 

Такая ситуация есть проимпортированный ActiveX компонент, у него есть событие
MyEvent(Sender : TObject; MyVariable OleVariant)
при создании в DLL как только возникает это событие сразу AccessViolation.
При чем пофигу, что динамически создавать, что ложить на форму.
В обычном проэкте все нормально. Кто-нить сталкивался, в чем могут быть грабли?


DinoRay   (2004-04-21 19:52:00) [1]

Вот такая-же ситуация..

http://delphi.chertenok.ru/forum/viewtopic.php?t=632&postdays=0&postorder=asc&start=7&sid=1b16c17a4878f5698194856fbfdec962
-----------------------
задавал свой вопрос в отдельной теме, но мне не удалось получить ни одного конкретного ответа. А в этой теме упоминалось про передачу OleVariant как параметра. Вот я и решил попытать удачу.
Я задам вопрос в этой теме, а если что то я думаю в ваших силах выделить его в отдельную тему.

Вопрос.
Имеется ActiveX компонент. Компонент генерит событие со следующими параметрами:(В примере описаны два события)

_DTestActXEvents = dispinterface
['{......-....-....-....-............}']
procedure EventVariant(index: Smallint; oleData: OleVariant); dispid 1;
procedure EventString(index: Smallint; const strData: WideString); dispid 2;
end;

TTestActXEventVariant = procedure(Sender: TObject; index: Smallint; oleData: OleVariant) of object; stdcall;
TTestActXEventString = procedure(Sender: TObject; index: Smallint; const strData: WideString) of object; stdcall;

private
FOnEventVariant: TTestActXEventVariant;
FOnEventString: TTestActXEventString;

published
property OnEventVariant: TTestActXEventVariant read FOnEventVariant write FOnEventVariant;
property OnEventString: TTestActXEventString read FOnEventString write FOnEventString;

Данное описание Дельфи создало автоматически.

Следующий код создан формой для обработки события.

procedure TForm1.TestActX1EventString(Sender: TObject; index: Smallint;
const strData: WideString);
begin
...
end;

procedure TForm1.TestActX1EventVariant(Sender: TObject; index: Smallint;
oleData: OleVariant);
begin
...
end;

Событие ...EventString работает без ошибок. Значение strData передается правильно.
Событие ...EventVariant генерит исключительную ситуацию(Неверный тип и т.д.). Значение oleData не передается.

Если вставлять ActiveX в С++ или в Бейсик, то оба события работают без ошибок...

Как добиться правильной передачи параметров в событии ...EventVariant в Дельфи?
----------------------------------------------------

Кто-че скажет?


VMcL   (2004-04-21 14:39:00) [2]

>>DinoRay ©  (21.04.04 13:47) [4]

Телепаты в отпуске.


DinoRay   (2004-04-21 13:47:00) [3]

Код... форма на ней компонент, вызывем из dll, если обработчик не назначен все Ок. Токо назначаем хоть пустой обработчик AccessViolation  

AccessViolation адресован конечно мне ну и что прояснит такая
ошибка чтения по адресу.. че в дебагер загонять и тэйсить...

ага я наверное не знаю че такое Call Stack смотрели
Sender все нормально указазатель на объект мой (MyVar:OleVariant - ???)

состояние одинаковое, что с проэкта что с dll токо AccessViolation в dll

Я с ActiveX плотно не работал вот я и спрашиваю, мож каки-ето подводные камни есть при вызове с dll?


VMcL   (2004-04-21 12:49:00) [4]

>>Digitman ©  (21.04.04 12:46) [2]

Эт точно, а если ещё Stop on exceptions включить да Call Stack вызвать...


Digitman   (2004-04-21 12:46:00) [5]

в сообщении об AccessViolation есть и конкретная инф-ция об исключении ... она, эта инф-ция, наверно, Пушкину адресована, а не тебе ... поэтому ты и игнорируешь ее, хотя эта инф-ция могла бы существенно прояснить ситуацию


VMcL   (2004-04-21 11:53:00) [6]

Код в студию.


Наверх

Титульная страница Поиск, карта сайта Написать письмо