Windows Compatibility Functions

Windows Compatibility Functions — Эмуляция UNIX в Windows.

Краткое описание

#include <glib.h> #define MAXPATHLEN #define pipe (phandles) gchar* g_win32_error_message (gint error); gchar* g_win32_getlocale (void); gchar* g_win32_get_package_installation_directory (gchar *package, gchar *dll_name); gchar* g_win32_get_package_installation_subdirectory (gchar *package, gchar *dll_name, gchar *subdir); guint g_win32_get_windows_version (void); gchar* g_win32_locale_filename_from_utf8 (const gchar *utf8filename); #define G_WIN32_DLLMAIN_FOR_DLL_NAME (static, dll_name) #define G_WIN32_HAVE_WIDECHAR_API () #define G_WIN32_IS_NT_BASED ()

Описание

Эти функции обеспечивают некоторый уровень эмуляции UNIX на Windows платыорме. Если ваше приложение реально нуждается в POSIX APIs, мы предлагаем попробовать проект Cygwin.

Детали

MAXPATHLEN

#define MAXPATHLEN 1024

Предусматривает эмуляцию UNIX в Windows; эквивалентна UNIX макрокоманде MAXPATHLEN, которая представляет максимальную длину имени файла (включая полный путь).


pipe()

#define pipe(phandles) _pipe (phandles, 4096, _O_BINARY)

Обеспечивает эмуляцию UNIX в Windows; смотрите документацию для pipe() в любом руководстве UNIX.

phandles : дескрипторы файла, первый для чтения, второй для записи.

g_win32_error_message ()

gchar* g_win32_error_message (gint error);

Переводит коды ошибок Win32 (которые возвращает GetLastError()) в соответствующие сообщения. Сообщения либо на нейтральном языке, либо на языке потоков, либо пользовательском языке, системном языке, или US English (смотрите документацию для FormatMessage()). Возвращаемая строка находится в кодировке UTF-8. Она должна быть освобождена с помощью g_free().

error : код ошибки.
Возвращает : вновь распределённое сообщение об ошибке

g_win32_getlocale ()

gchar* g_win32_getlocale (void);

Функция setlocale() в библиотеке Microsoft C использует имена локали из "English_United States.1252" и т.д.. Мы предпочитаем стандартную UNIX форму "en_US", "zh_TW" и т.д.. Эта функция получает текущий поток локали из Windows - без информации о кодировке - и возвращает её как строку в выше указанной форме для использования в формировании имён файлов и т.д.. Возвращаемая строка должна освобождаться с помощью g_free().

Возвращает : вновь распределённое имя локали.

g_win32_get_package_installation_directory ()

gchar* g_win32_get_package_installation_directory (gchar *package, gchar *dll_name);

Пытается определить каталог для установки программного пакета. Обычно используется программными пакетами GNU.

package должен быть коротким идентификатором для пакета. Обычно это тот же идентификатор который используется для GETTEXT_PACKAGE в конфигурационном программном обеспечении согласно стандартов GNU. Функция сначала ищет в Windows Registry значение #InstallationDirectory в ключе #HKLM\Software\package и если значение существует возвращает его.

Если package это NULL, или выше упомянутое значение не найдено в реестре, но dll_name не-NULL, она должна загрузить имя DLL в текущий процесс. Обычно это будет имя DLL вызывающей эту функцию, находящую для неё каталог установки. Затем функция запрашивает Windows из какого каталога эта DLL была загружена. Если последний компонент этого каталога "bin" или "lib", возвращается родительский каталог, иначе непосредственно сам каталог. Если эта DLL не загружена, функция выполняется как если бы dll_name был NULL.

Если и package и dll_name являются NULL, используется основной каталог в котором запущен процесс, вместо использования способа описанного выше.

package : Целочисленное для программного пакета в кодировке UTF8, или NULL,
dll_name : Имя DLL которую обеспечивает пакет, или NULL, в кодировке UTF-8
Возвращает : строка содержащая каталог установки для package. Строка в кодировке имён файлов GLib, то есть UTF-8 в Windows. Возвращаемое значение должно быть освобождено с помощью g_free() когда больше не используется.

g_win32_get_package_installation_subdirectory ()

gchar* g_win32_get_package_installation_subdirectory (gchar *package, gchar *dll_name, gchar *subdir);

Возвращает вновь распределённую строку содержащую путь подкаталога subdir в возвращаемом значении из вызова g_win32_get_package_installation_directory() с параметрами package и dll_name.

package : Идентификатор для программного пакета, в кодировке UTF-8, или NULL
dll_name : Имя DLL которую обеспечивает пакет, в кодировке UTF-8, или NULL
subdir : подкаталог установочного каталога для пакета, так же в кодировке UTF-8
Возвращает : строка содержащая полный путь к subdir внутри каталога установки package. Возвращаемая строка находится в кодировке имён файлов GLib, то есть UTF-8 в Windows. Возвращаемое значение должно освобождаться с помощью g_free() когда больше не используется.

g_win32_get_windows_version ()

guint g_win32_get_windows_version (void);

Возвращает информацию о версии для исполняемого кода операционной системы Windows. Смотрите документацию MSDN для функции GetVersion(). Коротко, наиболее важный бит - это один в Win9x, и ноль в NT-based системах. Начиная с версии 2.14, GLib работает только в NT-based системах, поэтому проверки выполняются ли ваши собственные программы в Win9x сомнительны. Самый младший байт - это 4 в Windows NT 4, и 5 в Windows XP. Программы которым реально необходима детальная информация о версии и особенностях, должны использовать Win32 API, например GetVersionEx() и VerifyVersionInfo().

Возвращает : Информация о версии.

Начиная с версии 2.6


g_win32_locale_filename_from_utf8 ()

gchar* g_win32_locale_filename_from_utf8 (const gchar *utf8filename);

Конвертирует имя файла из UTF-8 в системную кодировку.

В NT-based Windows, на файловых системах NTFS, имена файлов находятся в Unicode. Весьма возможно, что имена файлов в Unicode содержат символы не представленные в системной кодовой странице. (Например, Греческие или Кириллические символы в Восточной Европе или US Windows инсталяции, или менее общие символы CJK в CJK Windows инсталяции.)

В этом случае, и если имя файла ссылается на существующий файл, и файловая система хранит альтернативные короткие (8.3) имена для каталогов, возвращается короткая форма имени файла. Помните что "короткое" имя может быть фактически длиннее чем Unicode имя, если Unicode имя имеет очень короткий путь имени содержащий не-ASCII символы. Если нет возможного имени в системной кодировке для файла, возвращается NULL.

Возвращаемое значение динамически распределяется и должно быть освобождено с помощью g_free() когда больше не используется.

utf8filename : имя файла в кодировке UTF-8.
Возвращает : Конвертированное имя файла, или NULL если нет короткого имени.

Начиная с версии 2.8


G_WIN32_DLLMAIN_FOR_DLL_NAME()

#define G_WIN32_DLLMAIN_FOR_DLL_NAME(static, dll_name)

В Windows, этот макрос определяет DllMain() функцию которая сохраняет фактическое имя DLL для включения в компилируемый код.

На не-Windows платформах, ничего не делает.

static : свободная или "статичная".
dll_name : имя (указатель на) массив символов где будет хранится имя DLL. Если это используется, вы должны так же включить windows.h. Если вам нужно более сложную функцию точки ввода DLL, вы не должны использовать это.

G_WIN32_HAVE_WIDECHAR_API()

#define G_WIN32_HAVE_WIDECHAR_API() TRUE

В Windows, этот макрос определяет выражение которое выдаёт TRUE если код запущен в версии Windows использующей функции Win32 API широких символов, и широко-символьные версии функций библиотеки C работают. (Они всегда присутствуют в DLLs, но не работают в Windows 9x и Me.)

На не-Windows платформах, это не определено.

Начиная с версии 2.6


G_WIN32_IS_NT_BASED()

#define G_WIN32_IS_NT_BASED() TRUE

В Windows, этот макрос определяет выражение которое выдаёт TRUE если код выполняется в операционной системе на основе Windows NT.

На не-Windows платформах, это не определено.

Начиная с версии 2.6