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

Вниз

Код создания окна не работает в dll   Найти похожие ветки 

 
Sphinx ©   (2005-08-07 13:32) [0]

Один и тот же код, но при компиляции в .exe он работает, а при компиляции в .dll окно не создается

[CODE]function CreateRenderWindowDll(const iWndClass, iWndName: PChar; const iLeft, iTop, iWidth, iHeight: LongInt; const iStyle: LongWord): HResult;
var
 wError : Word;
begin
 if recRenderWin.WindowHandle <> 0 then
   begin
     CreateRenderWindowDll := ERROR_ALREADY_ASSIGNED;
     Exit;
   end;
 CreateRenderWindowDll := E_FAIL;
 with recRenderWin.WindowClass do
   begin
     style         := CS_VREDRAW or CS_HREDRAW;                      
     lpfnWndProc   := @WindowProc;                                  
     cbClsExtra    := 0;                                            
     cbWndExtra    := 0;                                            
     hInstance     := hInstance;                                    
     hIcon         := LoadIcon(hInstance, MakeIntResource("ICON"));  
     hCursor       := LoadCursor(0, IDC_ARROW);                      
     hbrBackground := $000000;                                      
     lpszMenuName  := nil;                                          
     lpszClassName := iWndClass;                                    
   end;
 wError := RegisterClass(recRenderWin.WindowClass);
 if wError = 0 then
   begin
     recRenderWin.CurrentError := GetLastError;
     Exit;
   end;
 recRenderWin.WindowHandle := CreateWindowEx
                                     (WS_EX_APPWINDOW,
                                      iWndClass,      
                                      iWndName,        
                                      iStyle,          
                                      iLeft,          
                                      iTop,            
                                      iWidth,          
                                      iHeight,        
                                      0,              
                                      0,              
                                      hInstance,      
                                      nil);            
 GDIMessageBox(PChar(IntToStr(recRenderWin.WindowHandle)), "", mb_ok);
 if recRenderWin.WindowHandle = 0 then
   begin
     recRenderWin.CurrentError := GetLastError;
     UnregisterClass(recRenderWin.WindowClass.lpszClassName, hInstance);
     Exit;
   end;
 with recRenderWin do
   begin
     WndLeft   := iLeft;
     WndTop    := iTop;
     WndWidth  := iWidth;
     WndHeight := iHeight;
   end;
 ShowWindow(recRenderWin.WindowHandle, SW_SHOW);
 SetActiveWindow(recRenderWin.WindowHandle);
 UpdateWindow(recRenderWin.WindowHandle);
 CreateRenderWindowDll := S_OK;
end;[/CODE]

Есть функция, которая экспортирует эту
[CODE]function CreateRenderWindow(const iLeft, iTop, iWidth, iHeight: Word; const iStyle: Cardinal): HResult;
var
 hrError : HResult;
begin
 hrError := CreateRenderWindowDll
                 (charWindowClass,
                  charWindowName,
                  iLeft,          
                  iTop,          
                  iWidth,        
                  iHeight,        
                  iStyle);        
 if (hrError = S_OK) and (hrError <> ERROR_ALREADY_ASSIGNED) and (hrError <> E_FAIL) then
   CreateRenderWindow := HResult(recRenderWin.CurrentError)
 else
   CreateRenderWindow := hrError;
end;[/CODE]

и сам экспорт
[CODE]exports
 CreateRenderWindow,[/CODE]

вызов
[CODE]CreateRenderWindow(50, 50, 800, 600, WS_OVERLAPPED);[/CODE]

вот собственно и основная ошибка, если вызывать эту функцию из другого приложения (сама библиотека компилируется как [B]library[/B]) то Handle окна всегда = 0
А если скомпилировать не в библиотеку, а в программу ([B]program[/B]) и делать вызов межбу [CODE]begin ... end.[/CODE] то окно прекрасно создается...

Что я забыл учесть ?


 
Sphinx ©   (2005-08-07 13:34) [1]

Сорри...под FireFox тэги не работают....набирал вручную :\


 
Sphinx ©   (2005-08-10 10:05) [2]

Огромное спасибо за ответы :\
Очень помогли.

З.Ы. проблема решилась передачей hInstance из .ехе файла



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

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

Наверх





Память: 0.47 MB
Время: 0.014 c
2-1125237004
Станислав
2005-08-28 17:50
2005.10.09
окно


14-1126755274
КаПиБаРа
2005-09-15 07:34
2005.10.09
Ажиотаж вокруг ФК Терек


5-1102439020
hawkins
2004-12-07 20:03
2005.10.09
Ошибка в наследнике TStringGrid


14-1126986860
Мексиканец
2005-09-17 23:54
2005.10.09
Заметил странный факт


4-1123766179
Dmitriy G.
2005-08-11 17:16
2005.10.09
Запуск Dll в отдельном потоке





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