Форум: "Основная";
Текущий архив: 2002.12.02;
Скачать: [xml.tar.bz2];
ВнизDLL на старте отсутствует! Найти похожие ветки
← →
Eugenex (2002-11-20 10:49) [0]Собрал прогу, которая должна работать как в 98-й так и в НТ.
Версии различить могу.
Но... прога юзает пару DLL, которых может небыть в 98-й.
Поэтому на старте крик и полный даун.
Как мне сделать так, чтобы в отсутствии некой DLL функции ее
использующие просто отключались, а работа проги продолжалась ???
Просьба ответить на мыло.
Спасибо.
← →
Reindeer Moss Eater (2002-11-20 10:51) [1]Динамический импорт vs статический
← →
Skier (2002-11-20 10:55) [2]>Eugenex
1) LoadLibrary + FreeLibrary (Динамический импорт)
2) FileExists(...)
← →
Reindeer Moss Eater (2002-11-20 10:57) [3]FileExists это лишнее.
← →
Игорь Шевченко (2002-11-20 11:09) [4]LoadLibrary + GetProcAddress
Пример:{
Модуль: HSGdi
Описание: Интерфейс к недокументрованным функциям GDI32.
Автор: Игорь Шевченко
Дата создания: 16.10.2002
История изменений:
}
unit HSGdi;
interface
uses
Windows;
type
TSizeRect = packed record
case Integer of
0: (Left, Top, Width, Height: Longint);
1: (TopLeft : TPoint; RectSize : SIZE);
end;
{ Элемент данных для PolyPatBlt }
TPatRect = packed record
R : TSizeRect; { Координаты и размер области заполнения }
Brush : HBRUSH; { Кисть, которой будет заполнена область }
end;
function PolyPatBlt (DC : HDC; { Контекст устройства }
dwRasterOp : DWORD; { Растровая операция (PATCOPY,
PATINVERT, ect}
Rects : Pointer; { Данные }
dwRectsCount : DWORD; { Количество элементов в PolyData }
dwReserved : DWORD { Назначение параметра неизвестно }
) : Boolean; stdcall;
implementation
uses
SysUtils;
{ Функции }
type
TPolyPatBlt = function (DC : HDC; dwRasterOp : DWORD;
Rects : Pointer; dwRectsCount : DWORD;
dwReserved : DWORD) : Boolean; stdcall;
var
_PolyPatBlt : TPolyPatBlt;
GdiDllHandle: THandle;
const
GdiDllname = "gdi32.dll";
function InitGDI : Boolean;
begin
if GdiDllHandle = 0 then
if Win32Platform = VER_PLATFORM_WIN32_NT then begin
GdiDllHandle := GetModuleHandle(GdiDllname);
if GdiDllHandle <> 0 then begin
@_PolyPatBlt := GetProcAddress(GdiDllHandle, "PolyPatBlt");
end;
end;
Result := (GdiDllHandle <> 0);
end;
function GdiNotImplemented : Boolean;
begin
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
Result := false;
end;
function PolyPatBlt (DC : HDC;
dwRasterOp : DWORD;
Rects : Pointer;
dwRectsCount : DWORD;
dwReserved : DWORD) : Boolean;
begin
if InitGDI AND Assigned(_PolyPatBlt) then
Result := _PolyPatBlt(DC, dwRasterOp, Rects, dwRectsCount, dwReserved)
else
Result := GdiNotImplemented;
end;
end.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.12.02;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c