![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
События 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]Код в студию.