Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

переменная в 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;


Наверх

Титульная страница Поиск, карта сайта Написать письмо