Можно ли вызвать собственный API Linux из приложения Windows, работающего в Wine?

Сценарий

У меня есть плагин (dll), написанный для приложения Windows (на C++).

Это приложение отлично работает в Linux под Wine, однако в плагине я хотел бы использовать функцию, которой пока нет в Wine.

Предполагая, что я могу определить во время выполнения, что приложение работает в Wine, могу ли я динамически загружать собственную библиотеку Linux (или получать доступ к собственному API Linux любым другим способом), чтобы эмулировать указанную функцию?

Мне любопытно, можно ли это сделать без серьезного взлома.


person Community    schedule 19.09.2016    source источник
comment
Как насчет того, чтобы написать собственное приложение для Linux? Если все сделано правильно, вы получите кроссплатформенное решение, которое работает в Linux и Windows. Но это, тем не менее, интересный вопрос.   -  person rubenvb    schedule 19.09.2016
comment
Спасибо, но я пишу плагин для foobar2000, который является музыкальным проигрывателем Windows с закрытым исходным кодом.   -  person    schedule 19.09.2016
comment
Я бы написал кроссплатформенную исполняемую программу и два небольших загружаемых плагина для конкретной ОС, которые взаимодействуют с ней через канал или какой-либо другой механизм.   -  person n. 1.8e9-where's-my-share m.    schedule 19.09.2016
comment
О каком API мы вообще говорим?   -  person rubenvb    schedule 19.09.2016
comment
Wine предоставляет функции Windows для Linux. Вы говорите, что хотите использовать функцию Windows, которую Wine еще не поддерживает, поэтому предлагаете эмулировать ее? Если вы хотите это сделать, то, возможно, вам следует добавить эту функцию в само Wine.   -  person John Bollinger    schedule 19.09.2016
comment
Я хочу создать символические ссылки, которые по какой-то причине не работают.   -  person    schedule 19.09.2016


Ответы (1)


Кажется, кто-то сталкивался с подобной проблемой или, по крайней мере, предсказывал такую ​​ситуацию. Wrapper-library поможет вам:

По той или иной причине вы можете обнаружить, что у вас есть библиотека Linux, которую вы хотите использовать, как если бы это была Windows DLL. Этому есть разные причины, в том числе следующие:

...

  1. У вас есть только двоичное приложение Windows, которое можно расширить с помощью подключаемых модулей, таких как текстовый редактор или IDE.

В двух словах - вы должны создать тонкую встроенную DLL-библиотеку Wine, которая действует как мост между ABI вашего PE-бинарника и ABI родной библиотеки Linux. Затем вы должны связать свой код с этой оболочкой. Для дистрибутива Windows вы можете предоставить «обертку» с пустыми заглушками. Такой подход позволяет вам использовать один двоичный файл для вашего плагина, который будет использовать функциональную DLL-оболочку для вина в Linux и DLL-заглушку в Windows.

person Sergio    schedule 19.09.2016
comment
Спасибо! Это не тот подход, который я имел в виду, но он имеет смысл. Используйте собственные инструменты Wine для создания Wine DLL. Я попробую. - person ; 19.09.2016