Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.10.09;
Скачать: CL | DM;

Вниз

Код создания окна не работает в 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 вся ветка

Текущий архив: 2005.10.09;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.037 c
14-1126769379
FreeAndFree
2005-09-15 11:29
2005.10.09
Кто нибудь пользовался MIDletPascal ?


14-1127220352
oldman
2005-09-20 16:45
2005.10.09
Бабы мочут, как хочут...


14-1125643750
Lexer
2005-09-02 10:49
2005.10.09
Злобный вирус POKAPOKA63


4-1123414423
ne0n
2005-08-07 15:33
2005.10.09
Монитор Реестра


6-1118900084
lightix
2005-06-16 09:34
2005.10.09
Отправка e-mail с помощью INDY:как получить MSGID письма?