Форум: "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