Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.03.06;
Скачать: CL | DM;

Вниз

RTTI + DLL   Найти похожие ветки 

 
ASH ©   (2005-02-21 15:21) [0]

Добрый день. У меня возникла проблема с определением типа объекта (A is TSomeClass), указатель которого передается в DLL. С чем это может быть связано? (ShareMem прописан)


 
Skier ©   (2005-02-21 15:24) [1]


> ShareMem прописан

первым прописан ?


 
Юрий Зотов ©   (2005-02-21 15:29) [2]

ShareMem тут ни при чем. Если Exe и DLL скомпилированы независимо, то один и тот же класс в каждом из них - это два разных класса, каждый со своей VMT. Поэтому IS и не проходит.

Может помочь компиляция Exe и DLL с run-time пакетами.


 
Семен Сорокин ©   (2005-02-21 15:38) [3]

2ASH
как вариант можно попробовать использовать интерфейсы.


 
ASH ©   (2005-02-21 15:39) [4]

Ну конечно же первым :-)
Спасибо, Юрий. А что если использовать пакеты, то VMT пакета будет общим для EXE и DLL?


 
Юрий Зотов ©   (2005-02-21 15:42) [5]

> ASH ©   (21.02.05 15:39) [4]

Я очень на это надеюсь...
:о)

А чего бы VMT не быть общей, если она останется в коде пакета, но не войдет ни в код Exe, ни в код DLL?


 
ASH ©   (2005-02-21 15:42) [6]

>Семен Сорокин
или через ком-объекты :-) спасибо


 
ASH ©   (2005-02-21 15:44) [7]

>Юрий Зотов
Любопытно, ни когда не думал об этом, огромное спасибо! Это то, что нада :-)


 
ASH ©   (2005-02-21 15:46) [8]

Вот еще вопрос, почему в главном меню окна не работают горячие клавиши, если это окно запускается из DLL? (оно к томуже модальное)


 
Семен Сорокин ©   (2005-02-21 15:54) [9]


> ASH ©   (21.02.05 15:46) [8]
> Вот еще вопрос, почему в главном меню окна не работают горячие
> клавиши, если это окно запускается из DLL? (оно к томуже
> модальное)

Application.Handle подменяешь?


 
Юрий Зотов ©   (2005-02-21 15:54) [10]

> ASH ©   (21.02.05 15:46) [8]

Скорее всего, потому, что независимо скомпилированная DLL имеет еще и свой собственный Application (а также Screen, Session и прочие глобальные объекты).


 
ASH ©   (2005-02-21 15:57) [11]

Нет не подменяю, иначе модальное окно не получается модальным, как быть?


 
ASH ©   (2005-02-21 15:58) [12]

Нет не подменяю, иначе модальное окно не получается модальным, как быть?


 
ASH ©   (2005-02-21 15:59) [13]

Нет не подменяю, иначе модальное окно не получается модальным, как быть?


 
ASH ©   (2005-02-21 16:00) [14]

Нет не подменяю, иначе модальное окно не получается модальным, как быть?


 
Vlad_ri   (2005-02-21 16:13) [15]

А это тоже не проходит?

if xxx.ClassName = "TSomeClass" then
...


 
Семен Сорокин ©   (2005-02-21 16:18) [16]


> ASH ©   (21.02.05 15:57) [11]
> Нет не подменяю, иначе модальное окно не получается модальным,
> как быть?


Почему? Вот код:
Procedure ShowDLLForm(AppHandle: HWND); stdcall;
begin
 if AppHandle = 0 Then
  AppHandle := GetActiveWindow;
 Application.Handle := AppHandle;
 try
  with TDLLForm.Create(Application) do
   try
    ShowModal
   finally
    Free
   end
 except
  on E: Exception do
   Application.HandleException(E)
 end;
 Application.Handle := 0;
end;


 
ASH ©   (2005-02-21 16:32) [17]

>Vlad_ri
Да это помогает, я так сначала и дела - просто меня интересовала суть баги :-)

>Семен Сорокин
Спасибо, нада попробовать



Страницы: 1 вся ветка

Текущий архив: 2005.03.06;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.04 c
3-1107536212
aleksey
2005-02-04 19:56
2005.03.06
locate по нескольким полям


8-1100374978
Alex_Rov
2004-11-13 22:42
2005.03.06
Не играет MP3 в Windows 98 SE


3-1107429115
Guest666
2005-02-03 14:11
2005.03.06
перемещение информации в BDE


3-1107700175
dreamse
2005-02-06 17:29
2005.03.06
Как выполнить хранимую процедуру с параметрами


6-1102991145
Timur
2004-12-14 05:25
2005.03.06
Счетчик трафика