Форум: "Основная";
Текущий архив: 2005.09.18;
Скачать: [xml.tar.bz2];
ВнизКак сделать, чтобы Win9x не искала библиотеку? Найти похожие ветки
← →
rolex (2005-08-27 20:42) [0]У меня прога должна работать в WinXP и Win9x.
Если прога запускается в WinXP, то функция берется из библиотеки (userenv.dll), а если в Win9x, то работает свой код.
в Public написал:function GetProfilesDirectory:string;
В коде программы написал:function ProfilesDirectory_Exp(lpProfilesDir:PChar; var lpcchSize:DWord):Bool;
stdcall; external "userenv.dll" name "GetProfilesDirectoryA";
function TForm1.GetProfilesDirectory:string;
var szBuffer:array[0..MAX_PATH] of Char; dwSize:DWord;
begin
dwSize := MAX_PATH;
if ProfilesDirectory_Exp(szBuffer, dwSize) then result:=szBuffer;
end;
Вызов делаю так:if Win32Platform=VER_PLATFORM_WIN32_NT then
Переменная:=Form1.GetProfilesDirectory
else Переменная:="";
Но даже если не вызывать функцию из этой библиотеки, то при запуске проги в Win9x, вылетает ошибка, что не найдена библиотека.
Так как же сделать так, чтобы Win9x не искал её?
← →
Sam Stone © (2005-08-27 20:46) [1]Используй динамическую загрузку DLL (как пользовать смотри в разделе "статьи")
← →
begin...end © (2005-08-27 20:47) [2]Анализировать платформу и загружать библиотеку динамически?
← →
rolex (2005-08-27 21:42) [3]Нашёл пример, как загружать бибиотеку динамически:
unit untMain;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
Tcalc_double = function ( r: real ): real;
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
var
hndDLLHandle: THandle;
calc_double: Tcalc_double;
begin
try
// загружаем dll динамически
hndDLLHandle := loadLibrary ( "ExDouble.dll" );
if hndDLLHandle <> 0 then
begin
// получаем адрес функции
@calc_double := getProcAddress ( hndDLLHandle, "calc_double" );
// если адрес функции найден
if addr ( calc_double ) <> nil then
begin
// показываем результат ( 21...)
showMessage ( floatToStr ( calc_double ( 10.5 ) ) );
end
else
// DLL не найдена ("handleable")
showMessage ( "Function not exists..." );
end
else
// DLL не найдена ("handleable")
showMessage ( "DLL not found..." );
finally
// liberar
freeLibrary ( hndDLLHandle );
end;
end;
end.
Но у меня при вызове ф-ции статистически (function ProfilesDirectory_Exp(lpProfilesDir:PChar; var lpcchSize:DWord):Bool;
stdcall; external "userenv.dll" name "GetProfilesDirectoryA";
) есть указатель (или как его назвать) name "GetProfilesDirectoryA". А в примере нету его.
Так куда же его написать?
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.09.18;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.012 c