Оценка 0 Оценить ![]() ![]() ![]() ![]() ![]() ![]()
|
![]() |
Q. Как можно в коде MTS/COM+-компонента найти, в каком апартменте он создан, причем для STA – в каком именно STA – host, main или ином, и как-то идентифицировать апартмент (по хендлу окна?) нельзя ли?
A. По смещению 0F80h в TEB находится адрес структуры, которая определяет параметры апартамента. Если указатель равен нулю, СОМ не инициализирован. Если инициализирован, по смещению 12 в этой структуре находится переменная, по значению которой можно определить тип аппартамента.
Пример кода:
int k;
__asm{
mov eax,fs:[18h];
mov eax,[eax+0F80h];
mov ebx,[eax+0Ch];
mov k,ebx
}
if (k == 0x81){
//STA
}
elseif (k == 0x141){
//MTA
}
|
см. также http://www.rsdn.ru/Forum/?mid=114989
Оценка 0 Оценить ![]() ![]() ![]() ![]() ![]() ![]()
|