Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как определить в какой ОС работает прога? [D6]


Интересующийся ©   (2006-03-12 07:53:00) 

Доброе время суток всем.

Мастера помогите, плиз!

Нужно определить в какой ОС работает прога.

Сейчас использую эту функцию


function GetPlatformId:DWORD;
var
PlatformInfo:OSVERSIONINFO;
begin

 PlatformInfo.dwOSVersionInfoSize:= Sizeof(OSVERSIONINFO);
 GetVersionEx(PlatformInfo);
 result:= PlatformInfo.dwPlatformId;

end;


Но как я понимаю, она понимает только Win32.

P.S.
Нужна функция работающая с Win32/Win64/Linux.


Anatoly Podgoretsky   (2006-04-05 19:58:00) [1]

Нифига себе


Игорь Шевченко   (2006-04-05 17:13:00) [2]


> Как программе собранной в Win32 и запустившейся в Linux
> (в режиме Win) понять что она в Linux?


Нафига ?


Ефеф   (2006-04-05 17:10:00) [3]

;) пиши на Яве ;)


Интересующися   (2006-03-12 20:08:00) [4]

Понятно.

Значит надо по Linux Api инфу искать.

Большое спасибо за помощь!


Интересующися   (2006-03-12 20:04:00) [5]

> tesseract ©   (12.03.06 17:30) [8]

> А на кой тебе это ?

Нужно exe получить который под всеми ОС работает, и сборка у него одна.

При запуске он должен определьть под какой ОС работает и действовать соответсвенно.

P.S.
Даже если это невозможно с Linux, Win64 он должен отлавливать на 100%.


tesseract   (2006-03-12 20:03:00) [6]


> Может кто зает, можно DLL под Linux написать?


*nix Dll называется so. (shared object)


> Что в Linux вместо Win API?


Linux Api - не сложно догадаться :-)

Для справки linux - это ЯДРО (kernel) и соответсвенно что там реализовано - то и стандарт. Остальное - сторонние API.


Интересующися   (2006-03-12 19:55:00) [7]

> Интересующися   (12.03.06 19:49) [9]

Дополнение к вопросу:

Что в Linux вместо Win API?

P.S.

Если кто знает примеры и инфу по этому вопросу может поделитесь?


Интересующися   (2006-03-12 19:49:00) [8]

Может кто зает, можно DLL под Linux написать?


tesseract   (2006-03-12 17:30:00) [9]


> Как программе собранной в Win32 и запустившейся в Linux
> (в режиме Win) понять что она в Linux?

Никак. Wine намертво тебя от linux изолирует.
А на кой тебе это ?

> А как тогла пишут крос-платформенные вещи?

Вот {$IFDEF} и используется. Это директива компилятора. Если компилируемся в win32,используем этот код, если в Linux - этот код.


Интересующися   (2006-03-12 15:11:00) [10]

> tesseract ©   (12.03.06 14:20) [6]

> Одновременно собрать программу под WIN и под LINUX не представляется возможным.

А как тогла пишут крос-платформенные вещи?


$IFDEF LINUX}

{$ELSE}

{$ENDIF}


P.S.

Вопрос таков.

Как программе собранной в Win32 и запустившейся в Linux (в режиме Win) понять что она в Linux?


tesseract   (2006-03-12 14:20:00) [11]


> сли я правидьно понял, весь код будет работать только при
> сборке под Linux?

Мужик !!! одновременно собрать программу под WIN и под LINUX не представляется возможным.

> Если я правидьно понял, весь код будет работать только при
> сборке под Linux?

Да так собрано множество CLX - компонент.


Интересующися   (2006-03-12 14:15:00) [12]

Добавление к функции.


{$IFDEF LINUX}

Result:= VER_PLATFORM_LINUX;

{$ELSE}


Интересующися   (2006-03-12 14:04:00) [13]


function GetPlatformId:DWORD;
var
PlatformInfo:OSVERSIONINFO;
begin

{$IFDEF LINUX}

Result:= DWORD;//Свое представление Linix

{$ELSE}

PlatformInfo.dwOSVersionInfoSize:= Sizeof(OSVERSIONINFO);
GetVersionEx(PlatformInfo);
result:= PlatformInfo.dwPlatformId;

{$ENDIF}

end;


> В случая сборки под linux это сработает. Если же запускаешь под WINE - получишь версию указанную в нём :-)

Если я правидьно понял, весь код будет работать только при сборке под Linux?


Интересующийся   (2006-03-12 13:56:00) [14]

>tesseract ©   (12.03.06 10:58) [2]


{$IFDEF LINUX}
{$ENDIF}


Это конечно понятно, а вот что в нутри?.......

>begin...end ©   (12.03.06 10:00) [1]

Насколько я помнь в результате функция выводит ОС как Win31, Win32 (95,98,Me), WinNT (NT,XP,2003) и другие версии.

Но это все 32-х разрядные штуки, а как определить 64?

P.S.

Есть идея согласно которой нужно отловить все прочие ОС и проверить Linux.
Если не он возможны два варианта:
1. Неизвестная ОС
2. ОС на 64.


tesseract   (2006-03-12 10:58:00) [15]


> Насчёт Linux -- это не очень смешная шутка.

{$IFDEF LINUX}
{$ENDIF}

В случая сборки под linux это сработает. Если же запускаешь под WINE - получишь версию указанную в нём :-)


begin...end   (2006-03-12 10:00:00) [16]

GetVersion определяет все Windows -- от 95 до Vista.
Насчёт Linux -- это не очень смешная шутка.


Наверх

Титульная страница Поиск, карта сайта Написать письмо