Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.01.21;
Скачать: [xml.tar.bz2];

Вниз

переменная в dll не хочет менять значение   Найти похожие ветки 

 
Альберт ©   (2006-12-29 04:35) [0]

пишу dll.
есть простая переменная типа HWND.
присваиваю ей новое значение (в программе) через экспортируемую процедуру dll. значение меняется только в этой экспортируемой процедуре (в dll), а в остальном коде равна нулю..


 
Альберт ©   (2006-12-29 04:39) [1]

привожу часть кода
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;


 
4ert   (2006-12-29 04:40) [2]

Не понятно... Переменная в программе? ....
Ты лучше  кусок куда привел... наглядней было б..


 
Альберт ©   (2006-12-29 04:43) [3]

привожу часть кода библиотеки

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.


 
Альберт ©   (2006-12-29 04:45) [4]

detectwnd в dll не меняется

а в программе она задается через setWND


 
Альберт ©   (2006-12-29 04:48) [5]

dll ставит хуки, мне нужно работать с определенными окнами. но не идет..


 
Альберт ©   (2006-12-29 04:50) [6]

а работа с памятью через mmf


 
Альберт ©   (2006-12-29 04:54) [7]

получилось))))

надобыло переменную засунуть в GlobalData


 
4ert   (2006-12-29 05:05) [8]

Я конечно не претендую, на звание Мастера, но всё же, просто любопытно и делать нечего, позволь задать вопрос, а смысл в этом коде вообще есть?
Насколько я вообще понимаю ты загрузаешь одну и тожу библиотеку, пока не будет ошибка, но насколько я понимаю, если ошибки не было сразу, тои не будет и потом(обычное понимание чайника), а если так, то процедура приведенная тобой будет запускать сама себя же оч. и оч. много раз пока в конце концов не выдаст наверно EAccessViolation...... Поэтому на мой взгляд(может быть я просто не так понял?) решить проблему неизменения переменной в неработающей прцедуре невозможно.



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

Форум: "Начинающим";
Текущий архив: 2007.01.21;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.044 c
9-1140608209
grisme
2006-02-22 14:36
2007.01.21
OpenGL Extensions


1-1164619913
AlexSt
2006-11-27 12:31
2007.01.21
Смена курсора при drag and drop от состояния управляющих клавиш


11-1124270752
L505
2005-08-17 13:25
2007.01.21
Font.Size or FontSize vs FontHeight


3-1162205718
oleg_v
2006-10-30 13:55
2007.01.21
как обнулить (обновить) поле Autoincrement(+)


2-1167757954
zol
2007-01-02 20:12
2007.01.21
заблокировать(запретить) ввод в TEdit





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский