Под Wine иль не под Wine?
Прелюдия
В жизни каждого Windows разработчика может наступить момент, когда кровь из носу необходимо понять, под управлением WineHQ работает программа или нет. Почему? Потому что мир не идеален, и необходимо помочь Wine переварить приложение корректно. Разумеется, если разработчика волнует фидбек от ребят по ту сторону баррикад (Mac, Linux и т.д.).
Мотивы
Назову несолько причин по которым это понадобилось нашей комманде:
- CHM хелпы отвратно отображаются под Wine;
- на голом Wine отсутствуют MS Jet 4.0 и MS MDAC 2.8;
- и как выяснилось, наши приложения (одно и второе) лучше выглядят, когда используются Microsoft Core Fonts (Arial, Courier, Times и т.д.).
Уверен, список можно дополнить, но это не является целью данной статьи.
Реализация
Способ элегантен и прост. Полагаю, любой вменяемый разработчик сможет адаптировать это для любимого языка.
Реализация для С:
bool GetWineAvail()
{
HMODULE h = LoadLibrary("ntdll.dll");
bool r = false;
if(h != NULL)
{
r = GetProcAddress(h, "wine_get_version") != NULL;
FreeLibrary(h);
}
return r;
}
//использование
if (GetWineAvail())
{
ShowMessage("Кругом вино, кэп!");
}
else
{
ShowMessage("Не видывал окна прозрачней.");
}
Реализация для Delphi:
function GetWineAvail: boolean;
var H: cardinal;
begin
Result := False;
H := LoadLibrary('ntdll.dll');
if H > 0 then
begin
Result := Assigned(GetProcAddress(H, 'wine_get_version'));
FreeLibrary(H);
end;
end;
//использование
if GetWineAvail() then
ShowMessage('Ура! Мы под Винищем!')
else
ShowMessage('Чистейший Виндовз, сэр!');
end;
Удачи!

комментарии (123)