Вниз
Скачать: CL | DM;

FreeLibrary   Найти похожие ветки 

← →
Александра   (2006-07-03 21:08) [0]

Привет! А почему функция FreeLibrary (HandleDll) не обнуляет HandleDll? Я его должна сама обнулить?


← →
begin...end ©   (2006-07-03 21:15) [1]

> Александра   (03.07.06 21:08) [0]

> А почему функция FreeLibrary (HandleDll) не обнуляет HandleDll?
Хотя бы потому, что HandleDll передаётся в FreeLibrary по значению, а не по ссылке.

> Я его должна сама обнулить?
Если это требуется, то да.


← →
Юрий Зотов ©   (2006-07-03 22:35) [2]

> Александра   (03.07.06 21:08)

А почему она должна его обнулять?

И каким образом функция может обнулить параметр, переданный ей не по ссылке?


← →
Rouse_ ©   (2006-07-04 11:11) [3]


> И каким образом функция может обнулить параметр, переданный
> ей не по ссылке?

Если вызывать с параметром в виде переменной, то:
procedure EmtyByVal(const Param: Integer);
asm
 xor esi, esi
end;


← →
Ketmar ©   (2006-07-04 11:22) [4]

э-э-э... и что? ну, поломали мы регистр, который ломать нельзя. как следует из документации, "результат непредсказуем".


← →
Rouse_ ©   (2006-07-04 11:25) [5]

Я же сказал - в случае, если через переменную. В дальнейшем при первом обращении к переменной ее значение будет браться из esi.
А пример был на слова "каким образом?"


← →
Игорь Шевченко ©   (2006-07-04 12:11) [6]

Rouse_ ©   (04.07.06 11:11) [3]

procedure EmptyParam (const Param: Integer);
asm
 xor esi,esi
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 MyParam: Integer;
begin
 MyParam := 2;
 EmptyParam (MyParam);
 ShowMessageFmt ("param = %d", [MyParam]);
end;


Эта...не обнуляется совсем...


← →
Rouse_ ©   (2006-07-04 13:17) [7]


> Игорь Шевченко ©   (04.07.06 12:11) [6]

Я же сказал, пример был на слова "каким образом?"
В твоем случае передается через ebx, его и чистим...

Я же не сказал что очищает любой переданный параметр, я показал как очистить параметр :)


← →
Игорь Шевченко ©   (2006-07-04 13:35) [8]

Rouse_ ©   (04.07.06 13:17) [7]


> В твоем случае передается через ebx, его и чистим...


Зачем чистить то, через что передается ? Это неразумный метод. Чистить надо саму переменную, а не регистр, в который помещено значение этой переменной.


← →
Rouse_ ©   (2006-07-04 13:42) [9]

Переменная содержиться на данный момент либо в стеке либо в одном из регистров.
Посему делаем так:

procedure EmptyParam (const Param: Integer);
asm
 push  ebp
 mov   ebp, esp
 test  eax, eax
 jz    @@exit
 push  ebx
 push  ecx
 push  edx
 push  esi
 push  edi
 xor   edx, edx
@@loop:
 mov   ecx, [esp + edx]
 cmp   eax, ecx
 je    @@find
 inc   edx
 jmp   @@loop
@@find:
 mov   [esp + edx], 0
@@store:
 pop  edi
 pop  esi
 pop  edx
 pop  ecx
 pop  ebx
@@exit:
 mov  esp, ebp
 pop  ebp
end;


← →
Rouse_ ©   (2006-07-04 13:43) [10]

В смысле не на данный момент, а на момент вызова функции...


← →
Игорь Шевченко ©   (2006-07-04 13:46) [11]


> Переменная содержиться на данный момент либо в стеке либо
> в одном из регистров.


Саша, если цель "очистить на данный момент", то вполне подойдет решение Param := 0 внутри функции EmptyParam, или вместо вызова этой функции :)


← →
Rouse_ ©   (2006-07-04 13:47) [12]

:))) Ок, согласен :)


← →
Александра   (2006-07-04 16:06) [13]

А если я возьму и ещё раз FreeLibrary (HandleDll)? Система случайно не выгрузит левую библиотеку?


← →
Джо ©   (2006-07-04 16:07) [14]

> [13] Александра   (04.07.06 16:06)
> А если я возьму и ещё раз FreeLibrary (HandleDll)? Система
> случайно не выгрузит левую библиотеку?

В чем проблема? никак не пойму. После FreeLibrary сделать HandleDll := 0 сложно?


← →
Ketmar ©   (2006-07-04 16:35) [15]

>Александра   (04.07.06 16:06) [13]
система не так глупа, как это кажется на первый взгляд.



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

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.024 c
1-1149682763
mmms
2006-06-07 16:19
2006.07.23
Как послать сообщение элементу, будто над ним находится мышь?


4-1144430576
Pojarnik
2006-04-07 21:22
2006.07.23
Ошибка при освобождении dll-ки(пример из Тейксеры и Пачеко)


15-1149995690
Black Angel
2006-06-11 07:14
2006.07.23
Не могу поставит Delphi 8


2-1150957006
lobach
2006-06-22 10:16
2006.07.23
Вставка компонентов


4-1144642984
Vad
2006-04-10 08:23
2006.07.23
Меню чужого приложения




   Наверх