Главная страница
    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.043 c
2-1167192241
Marat
2006-12-27 07:04
2007.01.21
преобразовать в дату


2-1168004094
Тиммммм
2007-01-05 16:34
2007.01.21
монохром


15-1167137146
Petr V. Abramov
2006-12-26 15:45
2007.01.21
А не устроить ли предновогоднее ММР


15-1167638328
kaZaNoVa
2007-01-01 10:58
2007.01.21
Методы управления людьми


4-1157708779
artemca
2006-09-08 13:46
2007.01.21
работа с netshell.dll или сетевой картой в windows





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский