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

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.016 c
1-4461
F1
2002-11-20 13:48
2002.12.02
Эксперимент с TreeView


1-4282
Walker
2002-11-20 12:53
2002.12.02
UN Format???


3-4198
Yazilimci
2002-11-13 15:22
2002.12.02
Vopros dlya ADO.


14-4612
F1
2002-10-31 13:11
2002.12.02
Мастера!!! Есть предложение!!!


3-4197
skirdov
2002-11-12 14:55
2002.12.02
Выборка данных с SQL Server во временную таблицу