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

Вниз

Как получить экземпляр класса зная его handle   Найти похожие ветки 

 
miklenew   (2008-05-31 19:05) [0]

Мож кто подскажет.
Есть класс.
Есть экземпляр этого класса.
У экземпляра этого класса есть handle.
Зная его handle можно получить сам экземпляр класса.


 
Leonid Troyanovsky ©   (2008-05-31 19:10) [1]


> miklenew   (31.05.08 19:05)  

> У экземпляра этого класса есть handle.

Что за таинственность?
Какой класс, какой хендл, зачем получать.

--
Regards, LVT.


 
DVM ©   (2008-05-31 20:05) [2]

В конференции по WinAPI единственный класс, который может быть как то связан с хэндлами - это оконный класс.


 
miklenew   (2008-05-31 20:25) [3]

Ну не хотел пугать.
Щас программирую не на delphi.
Система называется Axapta язык X++. Очень похож на C++.
Там практически все классы открыты.
Но есть очень мало (процента 2) закрытых.
Так вот есть один закрытый класс. (Editor)
У него есть handle.
Есть другой класс EditorScript(открытый). Чтобы обратиться к методам EditorScript на входе нужен Editor.
Экзэмпляр класса Editor живёт на всём протяжении работы программы до закрытия. Я могу хитро пересохранить этот Editor. Но это дополнительные телодвижения.
Так вот и хочется по нормальному получить через winApi по handle этот Editor. Но чёто никак не найду нужную api функцию.


 
Leonid Troyanovsky ©   (2008-05-31 20:41) [4]


> miklenew   (31.05.08 20:25) [3]

Очень быстро, я ничего не понял.

Есть, например, окна - у них есть хендлы.
А, кроме того, есть, например, хуки, объекты GDI и  ядра.

Чего тебе надобно, старче?

--
Regards, LVT.


 
DVM ©   (2008-05-31 20:52) [5]


> Так вот и хочется по нормальному получить через winApi по
> handle этот Editor

Editor - это окно? Или что еще? Что это?

Если это просто класс (как класс в делфи или си), то WinApi знать не знает ничего о таких классах.

А хэндл окна получить можно очевидно с помощью FindWindow()


 
miklenew   (2008-05-31 21:09) [6]

Ну я так понимаю handle есть у любой структуры которая содержиться в памяти. Не зависимо окно это или класс. Потоки это тоже экземпляры классов. Покрайней мере в Axapte handle есть и у класса(handle) и у окна(hwnd). Но не посредственно в Axapt-e winApi мало где используется (мест 50-60).  
Класс это всего лиши набор переменных(разного типа). Можно даже до создания экземпляра класса узнать сколько система под него выделит памяти.
Пусть в классе будут три переменных
Точно щас не помню сколько байт под какой тип
integer x;(4 байта)
boolean y;(1 байта)
integer z; (4 байта)
Но в результате класс в памяти будет занимать 9 байт.
В инете нашёл такую статью "Как получить список запущеных процесов"
http://www.rsdn.ru/article/qna/baseserv/enumproc.xml
Но скорее всего это мне не понадобиться так как handle как определить я знаю. Но вот как получить сам объект ни как не найду.


 
Leonid Troyanovsky ©   (2008-05-31 21:14) [7]


> miklenew   (31.05.08 21:09) [6]

> Ну я так понимаю handle есть у любой структуры которая содержиться
> в памяти.

Заблуждение.

--
Regards, LVT.


 
miklenew   (2008-05-31 21:15) [8]

to DVM Editor это класс. Такой же класс как в delphi и си. Просто все классы в Axapt-e по иерархии идут от Object. У object есть handle, ну соответственно он есть и у всех наследников, т.е. у всех классов.


 
miklenew   (2008-05-31 21:18) [9]

to Leonid Troyanovsky.
Ну может не у любой. Согласен не точное утверждение.
Более точно не могу. Не готов.


 
{RASkov} ©   (2008-05-31 21:24) [10]

> [8] miklenew   (31.05.08 21:15)

Что для тебя есть Хэндл в виндовс? И что за хэндлы у Axapta"ских Object"ов...


 
Leonid Troyanovsky ©   (2008-05-31 21:28) [11]


> miklenew   (31.05.08 21:18) [9]

> Более точно не могу. Не готов.

Ну, а что тебе надобно, старче.

--
Regards, LVT.


 
miklenew   (2008-05-31 21:28) [12]

handle - для меня идентификатор объекта в памяти.


 
{RASkov} ©   (2008-05-31 21:31) [13]

> [12] miklenew   (31.05.08 21:28)

Точно не готов)


 
{RASkov} ©   (2008-05-31 21:35) [14]

> [12] miklenew   (31.05.08 21:28)

В принципе.... идентификаторы - он все в памяти...
Хэндл - это число(уникальный идентификатор окна) в виндовс.


 
Leonid Troyanovsky ©   (2008-05-31 21:37) [15]


> {RASkov} ©   (31.05.08 21:35) [14]

> Хэндл - это число(уникальный идентификатор окна) в виндовс.

Окно здесь ни причем.

--
Regards, LVT.


 
{RASkov} ©   (2008-05-31 21:43) [16]

> [15] Leonid Troyanovsky ©   (31.05.08 21:37)

?
Как это не причем? )
Я ему вопрос в [10] задавал.... в [12] он вроде как ответил.... ну и тут [14])
Может и не причем для егошних хэндлов, но тогда пусть мой пост поймет, как намек, на то, что в винапи другие хэндлы....
:)


 
miklenew   (2008-05-31 21:44) [17]

Вот ссылка хорошая для определения
http://www.codenet.ru/progr/bcb/Handle-Types.php
Где-то ещё видел иерархию но щас чё-то не найду
Там было handle вверху.
Далее hwnd - handle window
hdc - handle device context
и ещё помомойму один или два.


 
{RASkov} ©   (2008-05-31 21:49) [18]

В виндовс - хэндлы, в любом случае, имеют только оконные элементы(классы, типы)... Даже "долбанная" метка STATIC и та считается окном и имеет "ручку"(handle) в системе....


 
Leonid Troyanovsky ©   (2008-05-31 21:54) [19]


> {RASkov} ©   (31.05.08 21:43) [16]

> Как это не причем? )
> Я ему вопрос в [10] задавал.... в [12] он вроде как ответил.
> ... ну и тут [14])

Хз, как он понял. Я этого не понял :)

--
Regards, LVT.


 
{RASkov} ©   (2008-05-31 22:01) [20]

> [19] Leonid Troyanovsky ©   (31.05.08 21:54)

:) Ну и ладно...
По моему вопрос автора потерял смысл.... Это если про Хэндл Object"а из Axapta язык X++ with WinAPI. :)


 
Leonid Troyanovsky ©   (2008-05-31 22:07) [21]


> {RASkov} ©   (31.05.08 22:01) [20]

> По моему вопрос автора потерял смысл.... Это если про Хэндл
> Object"а из Axapta язык X++ with WinAPI. :)

Хороший вопрос.
Хотя, непонятно, чего он задан здесь.

--
Regards, LVT.


 
miklenew   (2008-05-31 22:09) [22]

to Leonid Troyanovsky ничуть.
Помойму просто это вы на окнах заморочились.
Про окна то литературы много.
У меня есть программа которая может перебрать все открытые окна в Axapt-e(Axapt-a - основана на mdi).
С окнами просто суй hwnd в нужную функцию и действия визуально отобразяться на окне.
А вот с классом сложнее поэтому и спросил. Думал мож кто копался.
Похоже нет.


 
Умища   (2008-06-01 01:52) [23]


> miklenew   (31.05.08 22:09) [22]
> to Leonid Troyanovsky ничуть.Помойму просто это вы на окнах
> заморочились.Про окна то литературы много.У меня есть программа
> которая может перебрать все открытые окна в Axapt-e(Axapt-
> a - основана на mdi).С окнами просто суй hwnd в нужную функцию
> и действия визуально отобразяться на окне. А вот с классом
> сложнее поэтому и спросил. Думал мож кто копался.Похоже
> нет.


Как уже сказали Handle (дескриптор) - это просто идентификатор.
Если для какой-либо сущности определены методы определения самой сущности по идентификатору, то тогда эту сущность можно определить. В общем случае - нет.


 
Kolan ©   (2008-06-01 11:36) [24]

Просто надо сходить на форум мастеров X++ (Хэ плюс плюс), и там, тебе автор, расскажут как сделать сабж.


 
miklenew   (2008-06-01 12:22) [25]

Какая разница какой язык. Я программировал и на VС++, VB и на Delphi.
Если ты знаешь как это сделать хоть на одном языке, ты это сможешь сделать на другом. Просто с winApi мне практически не приходилось работать.
Странно мне слышать от мастеров WinApi, что winApi в одном языке чем то отличается от winApi в другом.
Вообщем если у кого-то есть предложения в какую сторону копать буду рат выслушать. А впустую тему засорять не надо. Пусть лучше пустой будет.


 
{RASkov} ©   (2008-06-01 13:13) [26]

> [25] miklenew   (01.06.08 12:22)
> Вообщем если у кого-то есть предложения в какую сторону
> копать буду рат выслушать

Сначало нарой для себя, что есть хэндл в "твоем" супер-пупер хэ языке.....

> Просто с winApi мне практически не приходилось работать.

Вот отсюда и твоя "озлоба" теперяшняя на всех.... :)


 
miklenew   (2008-06-01 13:25) [27]

Ещё раз прошу кому нечего сказать не надо.
Raskov просто я человек ответственный и никогда бы не позволел себе написать то что написал в последнем посте.
Я знаю что ты щас будешь искать признаки озлобы в моих постах чтоб что-то кому-то доказать.
Не надо не трудись.
Обидеть я тебя не хочу. Может ты офигенный специалист.
Но просто эту тему ты видно не рыл. Так зачем эту тему переводить в политической русло.
ок.


 
{RASkov} ©   (2008-06-01 13:35) [28]

> [27] miklenew   (01.06.08 13:25)
> Обидеть я тебя не хочу.

Можешь не сомневаться, но у тебя это все равно не выйдет) Маскимум потеряешь от меня помощь...

> Но просто эту тему ты видно не рыл.

Видно...., так же видно, что и другие здесь "роют" другую тему.... форум-то по Дэлфи.... Да, ВинАПИ - оно и в африке ВинАПИ, но.... как твой Хэ смотрит на винапи? кому это известно? Я вот у тебя и интересуюсь, а ты думаешь, что мы тут друг-друга обижаем? ну и думай себе.... Удачи.

> Не надо не трудись.

Не вопрос :)


 
miklenew   (2008-06-01 13:43) [29]

пример
client static public HWND getWindow(HWND _hWnd, int _cmd)
{
   DLL         DLL;
   DLLFunction DLLFunction;
   HWND        hWnd;
   ;

   DLL = new DLL("USER32");
   DLLFunction = new DLLFunction(DLL,"GetWindow");
   DLLFunction.returns(ExtTypes::DWord);//на выходе

   DLLFunction.arg(ExtTypes::DWord,ExtTypes::DWord);//на входе
   hWnd = DLLFunction.call(_hWnd,_cmd);//получаем результат

   return hWnd;
}


 
{RASkov} ©   (2008-06-01 13:53) [30]

> [29] miklenew   (01.06.08 13:43)

Это пример чего, для чего и на чем? ...на си что ли.... или на Axapta язык X++?

Вот смотри:

type
 TObject = class //Класс без винхэндла
....
 end;

 TMyObject = class //Класс с "хэндлом", но он никакого отношения не имеет к винапи
......
  Handle: THANDLE;
 end;

 TWinControl = class(TControl)  //Класс, имеющий хэндл тот, что понимает винапи.
....  
   property Handle: HWnd read GetHandle; //можно проследить всю цепь получения "ручки" в Win.
....
 end;

Так же незабываем поглядывать в [2]


 
{RASkov} ©   (2008-06-01 13:57) [31]

Более того.... нет никакого смысла этой ветки в "начинающих", раз уж ее убрали из винапи, то только в "прочих" можно еще чего-то обсуждать... ибо Хэ)


 
sniknik ©   (2008-06-01 14:10) [32]

miklenew   (01.06.08 13:43) [29]
> пример
это пример не winapi, а похоже пример использования какойто "местной"  dll
> hWnd = DLLFunction.call(_hWnd,_cmd);//получаем результат
функции call в "Win32 API Interface Unit" (описателях функций winapi) нет, и получается это своя "местечковая" функция, такая же dll, и переменная типа хендл просто переменная, ничего общего с winapi не имеющая.
не, оно конечно возможно, что эта функция возвращает хендл какогото окна, но ни один спец по winapi, незнающий что это за библиотека/функция этого не определит. т.что тебя правильно послали, на тот форум... и обижаешься ты совсем не "к месту".


 
miklenew   (2008-06-01 14:23) [33]

Это на x++. Я же говорил x++ очень похож на с++.
Это пример использования функций winApi. Легко ведь. Только нужную библиотеку и функцию не найду которая смогла бы мне вернуть что нибудь из чего я смогу получить Object.
Класс в Axapt-е создаётся просто.
Class1 example = new Class1();
После этого можно считывать handle.
example.handle();
Но у него нет hwnd. Логично
А у формы(окно) есть hwnd, но нет handle.
Форма с классом никак не связана.
sniknik да DLLFunction это класс оболочка для удобного обращения с любыми dll-ми. Указывай только к какой dll подключаться. Какая функция нужна.
Создаёшь описатель входных и выходных параметров.
А дальше вызываешь call. Ну что вроде команды фас.
Отдал нужные входные параметры для dll функции call(параметр1, параметр2 и т.д.) и получил выходные.
Кстати не всегда идёт считывание result = call(). Так как есть такие dll функции которые не возращают, а изменяют входные.
Что-то типа call(пар1, пар2) и после этого нужный нам результат находиться в пар1 или пар2. Т.е. dll функция просто изменила входной параметр.


 
{RASkov} ©   (2008-06-01 14:29) [34]

> [33] miklenew   (01.06.08 14:23)
> Это пример использования функций winApi. Легко ведь. Только
> нужную библиотеку и функцию не найду которая смогла бы мне
> вернуть что нибудь из чего я смогу получить Object.

WinAPI - знать не знает ни о каких Object"ах.... [2] читал?
Настырный, ладно посмотри на GetClassХххх вчасности на GetClassName(), только смысла тебе от них? Хотя...может и повезет)


 
ketmar ©   (2008-06-01 14:53) [35]

верните тему про самолётик, там интересней!

---
All Your Base Are Belong to Us



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

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

Наверх




Память: 0.56 MB
Время: 0.018 c
2-1213209020
slavikdr
2008-06-11 22:30
2008.07.13
Есть задачка с веб-страницами


2-1211262319
grav
2008-05-20 09:45
2008.07.13
IBDataSet, Master-Detail и Insert


15-1211788555
lead-in
2008-05-26 11:55
2008.07.13
ключи для sfx rar


15-1211891858
Knight
2008-05-27 16:37
2008.07.13
1C 7.7 + Delphi + ADO + MS SQL


15-1211874057
Tualatin
2008-05-27 11:40
2008.07.13
ресурсы (да они самые)