Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
2-1123605234
Nox777
2005-08-09 20:33
2005.09.18
Как вычислить арккосинус числа?


3-1123133263
k2
2005-08-04 09:27
2005.09.18
Курсорные переменные (oracle)


2-1123702940
Ламерок
2005-08-10 23:42
2005.09.18
Текст


4-1122287537
AxelBlack
2005-07-25 14:32
2005.09.18
Вопрос об использовании параметров WM_SysCommand в Perform


5-1099377771
Kair
2004-11-02 09:42
2005.09.18
PropertyEditor, paSubProperties





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский