Главная страница
    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
6-1118642221
silvestr
2005-06-13 09:57
2005.10.09
winpcap


5-1102447881
Arnold
2004-12-07 22:31
2005.10.09
Каак создать TButton с возможностью загрузки рисунков?


9-1117777196
SSG
2005-06-03 09:39
2005.10.09
Мировые координаты.


14-1127106722
Ozone
2005-09-19 09:12
2005.10.09
Нужен свитч


4-1123735019
ndn
2005-08-11 08:36
2005.10.09
Медленная печать на матричном принтере





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