Использование Windows DLL в портативном приложении - PullRequest
4 голосов
/ 10 ноября 2008

Я создал приложение для Windows C ++, которое я хотел бы перенести на linux. Основными причинами этого является простота обслуживания системы для нашего ИТ-персонала. Помимо одной машины Windows, которая запускает это приложение, мы выполняем только Linux.

Причина, по которой это приложение было встроено и работает в Windows, заключается в том, что оно использует Windows API (DLL и заголовок) для подключения к серверу, принадлежащему внешней стороне. В этом соединении используется какой-то проприетарный протокол, с которым я не хочу связываться (и я думаю, что по контракту мне это не разрешено), поэтому я застрял с .dll.

Эта dll является windows только из-за (я подозреваю) специфичного для Windows сокетов кода в dll. Кроме того, он не делает много продвинутых вещей. Есть ли способ где-то между просто запустить приложение на linux в WINE и прослушать протокол и переопределить саму DLL, что позволит мне запустить это приложение на машине с linux?

Эта идея была вдохновлена ​​этим элементом о создателе QT , поэтому любое решение, позволяющее мне поиграть с этим, было бы очень здорово.

1 Ответ

6 голосов
/ 10 ноября 2008

Самым очевидным средним уровнем будет использование Winelib . Я не знаю, может ли он напрямую ссылаться на нативную DLL, но если нет, то вы, вероятно, можете загрузить его с LoadLibrary().

Затем вы можете разделить ваше приложение на две части: оболочка, которая вызывает только DLL, и остальная часть кода, взаимодействующая с вашей оболочкой. Вы могли бы иметь оба в отдельных процессах, и, таким образом, с Winelib пришлось бы компилировать только оболочку. Затем остальная часть приложения может использовать любой фреймворк.

...