Форум: "Начинающим";
Текущий архив: 2008.06.22;
Скачать: [xml.tar.bz2];
Внизне возвр. handle, почему? Найти похожие ветки
← →
xaxatun (2008-05-26 06:16) [0]function CreateWindow (WindowProc:Pointer; L,T,W,H:Word) :HWND; export; stdcall;
var
wnd :TWndClassEx;
begin
ZeroMemory (@wnd, SIZEOF (wnd));
with wnd do begin
cbSize := SIZEOF (wnd);
lpfnWndProc := WindowProc;
hInstance := hInstance;
hCursor := LoadCursor (0, IDC_ARROW);
lpszClassName := "x";
end;
RegisterClassEx (wnd);
Result := Windows.CreateWindowEx (WS_EX_APPWINDOW, "x", "x", WS_POPUP, L, T, W, H, 0, 0, hInstance, nil);
end;
функцию созд. окна поместил в dll"ку, перестала возвращать handle, почему? если скопировать в модуль программы - работает, в dll"ке нет, в чем может быть причина?
← →
МистерТ (2008-05-26 09:04) [1]hInstance из .exe передавай в .dll
← →
Leonid Troyanovsky © (2008-05-26 09:22) [2]
> xaxatun (26.05.08 06:16)
> handle, почему? если скопировать в модуль программы - работает
Г.Х.Андерсен.
> МистерТ (26.05.08 09:04) [1]
> hInstance из .exe передавай в .dll
Начинать надо с Win32Check.
Или, хотя бы, с передачи класса в CWE.
--
Regards, LVT.
← →
ага0 (2008-05-26 14:00) [3]МистерТ дело грит. Вот здесь нать hInstance модуля с WindowProc
> with wnd do begin
> cbSize := SIZEOF (wnd);
> lpfnWndProc := WindowProc;
> hInstance := hInstance; <---
← →
Leonid Troyanovsky © (2008-05-26 16:09) [4]
> ага0 (26.05.08 14:00) [3]
> > hInstance := hInstance; <---
Нать это, во-ще, к делу не относится, бо этого
класса окна создавать и не пытаются.
--
Regards, LVT.
← →
ага0 (2008-05-26 16:14) [5]
> Нать это, во-ще, к делу не относится, бо этого
> класса окна создавать и не пытаются.
А какого пытютьси?
← →
Leonid Troyanovsky © (2008-05-26 16:26) [6]
> ага0 (26.05.08 16:14) [5]
> А какого пытютьси?
Хз, зри код.
--
Regards, LVT.
← →
ага0 (2008-05-26 16:48) [7]Я иль окончательно ослеп иль столь же окончательно поглупел ( что в прынцыпу равновероятно) - не вижу:(
> lpszClassName := "x";
> Result := Windows.CreateWindowEx (WS_EX_APPWINDOW, "x",
Не оно? Аль чет ишшо не так?
← →
ага0 (2008-05-26 16:52) [8]А!!! Я понял, понял!!!
:)))
Ты про то, шо результ регистрации класса не проверяется! Ну дата, ага. Однако-ж думается, что он из-за инстанции и не проходить
← →
Leonid Troyanovsky © (2008-05-26 18:31) [9]
> ага0 (26.05.08 16:52) [8]
> и не проходить
Чего гадать, пусть зовет Win32Check.
Класс и окно, очевидно, что в одном модуле.
--
Regards, LVT.
← →
dev (2008-05-26 18:57) [10]спасибо, не работало из за instance.
← →
Leonid Troyanovsky © (2008-05-26 19:08) [11]
> dev (26.05.08 18:57) [10]
Ты-то кто? Мало ли что у кого не работает.
Код показывай.
--
Regards, LVT.
← →
xaxatun (2008-05-26 19:15) [12]спасибо, не работало из за instance.
← →
Leonid Troyanovsky © (2008-05-26 19:38) [13]
> xaxatun (26.05.08 19:15) [12]
> спасибо, не работало из за instance.
Любопытно.
--
Regards, LVT.
← →
МистерТ (2008-05-26 19:56) [14]> Leonid Troyanovsky © (26.05.08 09:22) [2]
> > МистерТ (26.05.08 09:04) [1]
> > hInstance из .exe передавай в .dll
>
> Начинать надо с Win32Check.
> Или, хотя бы, с передачи класса в CWE.
Уже не однократно сталкивался, что в .dll созданных в Delphi hInstance = 0, поэтому функция регистрации класса завершается успешно, а создание окна возвращает "неверный параметр".
Возможно это такая особенность компилятора, возможно я чего-то недопонимаю, почемк так. Но если передать из приложения ссылку на hInstance .exe - то все прекрасно работает.
← →
ага0 (2008-05-26 21:20) [15]2 МистерТ
Да че б ей быть нулем? Нормальная там hInstance, тока в ей адрес загрузки самой библиотеки. А для RegisterClassEx треба шоб в TWndClassEx.hInstance был адрес того модуля, куда кажить TWndClassEx.lpfnWndProc. Он жеж функцию из экзешника передает, экзешника hInstance и нужон. А тут ваще самому себе себя присваиват
> with wnd do begin
> cbSize := SIZEOF (wnd);
> lpfnWndProc := WindowProc;
> hInstance := hInstance;
ет означает
wnd.hInstance:=wnd.hInstance
натурально как был ноль так и остался:) Вот такие пироги.
← →
ага0 (2008-05-26 21:28) [16]А. Да. Про ноль забыл сказать, ага. Экзешник по нижним адресам грузится, мот потому наверна ноль и прокатывает и при вызове из экзешника. А мож она ноль как дефолт принимает и сама экзешник подставляет, типа того. Да не пофиг ли почему, главно принимает:)
← →
Leonid Troyanovsky © (2008-05-26 22:15) [17]
> МистерТ (26.05.08 19:56) [14]
> hInstance = 0, поэтому функция регистрации класса завершается
> успешно, а создание окна возвращает "неверный параметр".
Все это неубедительно без указания места и вида WindowProc.
--
Regards, LVT.
← →
Leonid Troyanovsky © (2008-05-26 22:33) [18]
> Leonid Troyanovsky © (26.05.08 22:15) [17]
See also:
http://msdn.microsoft.com/en-us/library/ms633574(VS.85).aspx
CS_GLOBALCLASS
--
Regards, LVT.
← →
Loginov Dmitry © (2008-05-26 23:22) [19]> Уже не однократно сталкивался, что в .dll созданных в Delphi
> hInstance = 0, поэтому функция регистрации класса завершается
> успешно, а создание окна возвращает "неверный параметр".
> Возможно это такая особенность компилятора, возможно я чего-
> то недопонимаю, почемк так. Но если передать из приложения
> ссылку на hInstance .exe - то все прекрасно работает.
Компилятор непричем. Класс окна - структура, состоящая из имени, различных параметров, адреса оконной функции и hInstance. При создании окна указывается имя класса и hInstance (без адреса оконной функции). При вызове функции CreateWindows() Windows выполняет поиск производного класса окна, только среди классов, зарегистрированных в данном приложении. В приложении может быть (и будет) сколько угодно одноименных оконных классов (но hInstance у всех разные). Для поиска используются параметры "имя класса" и hInstance. hInstance - может быть любое (произвольное) число. Оно используется для того, чтобы найти класс с требуемой оконной функцией (если класс зарегистрирован в какой-то конкретной DLL (закреплен за DLL), то функция CreateWindows() (обычно) должна обращаться именно к этому классу). Может и мутно написано, но основной смысл в этом, остальное - в хэлпе.
← →
Loginov Dmitry © (2008-05-26 23:23) [20]цитата не совсем правильная, ну надеюсь, что хоть в тему сказанул :)
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.06.22;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.041 c