![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
переменная в dll не хочет менять значение [D6, XP]
Альберт © (2006-12-29 04:35:00)пишу dll.
есть простая переменная типа HWND.
присваиваю ей новое значение (в программе) через экспортируемую процедуру dll. значение меняется только в этой экспортируемой процедуре (в dll), а в остальном коде равна нулю..
4ert (2006-12-29 05:05:00) [1]Я конечно не претендую, на звание Мастера, но всё же, просто любопытно и делать нечего, позволь задать вопрос, а смысл в этом коде вообще есть?
Насколько я вообще понимаю ты загрузаешь одну и тожу библиотеку, пока не будет ошибка, но насколько я понимаю, если ошибки не было сразу, тои не будет и потом(обычное понимание чайника), а если так, то процедура приведенная тобой будет запускать сама себя же оч. и оч. много раз пока в конце концов не выдаст наверно EAccessViolation...... Поэтому на мой взгляд(может быть я просто не так понял?) решить проблему неизменения переменной в неработающей прцедуре невозможно.
Альберт (2006-12-29 04:54:00) [2]получилось))))
надобыло переменную засунуть в GlobalData
Альберт (2006-12-29 04:50:00) [3]а работа с памятью через mmf
Альберт (2006-12-29 04:48:00) [4]dll ставит хуки, мне нужно работать с определенными окнами. но не идет..
Альберт (2006-12-29 04:45:00) [5]detectwnd в dll не меняется
а в программе она задается через setWND
Альберт (2006-12-29 04:43:00) [6]привожу часть кода библиотеки
library flash;
var detectwnd:HWND;
procedure setwnd(wnd:HWND); export; stdcall;
begin
detectwnd:=wnd;
end;
procedure xxx;
begin
//detectwnd === 0!!
end;
procedure DLLEntryPoint(dwReason: DWord); stdcall;
begin
case dwReason of
DLL_PROCESS_ATTACH: OpenGlobalData;
DLL_PROCESS_DETACH: CloseGlobalData;
end;
end;
exports hook, setWND;
begin
DLLProc:= @DLLEntryPoint;
DLLEntryPoint(DLL_PROCESS_ATTACH);
end.
4ert (2006-12-29 04:40:00) [7]Не понятно... Переменная в программе? ....
Ты лучше кусок куда привел... наглядней было б..
Альберт (2006-12-29 04:39:00) [8]привожу часть кода
Application
type MyProcType2 = procedure (w:HWND); stdcall;
var Hdll : HWND;
procedure setwnd(wnd:HWND);
var
setwnd: MyProcType2;
begin
Hdll:= LoadLibrary(PChar('flash.dll'));
@setWND:= nil;
if Hdll > HINSTANCE_ERROR then
begin
@setWND:=GetProcAddress(Hdll, 'setwnd');
setwnd(wnd);
end;
end;