2008-11-09 8 views
4

J'ai créé une application Windows C++ que je souhaite porter sous Linux. Les principales raisons à cela sont la facilité de maintenance du système pour notre personnel informatique. En dehors de la machine Windows qui exécute cette application, nous sommes une opération Linux seulement.Utilisation de DLL Windows dans une application portable

La raison pour laquelle cette application a été construite et fonctionne sous Windows est qu'elle utilise une API Windows (DLL et en-tête) pour se connecter à un serveur appartenant à une partie externe. Cette connexion utilise un protocole propriétaire que je ne veux pas vraiment manipuler (et je pense que je ne suis pas autorisé à le faire), donc je suis bloqué avec le fichier .dll.

Cette DLL est Windows uniquement en raison de (je suspecte) le code spécifique aux sockets Windows dans la DLL. En dehors de cela, il ne fait pas beaucoup de choses avancées. Y a-t-il un moyen entre lancer l'application sur linux dans WINE et renifler le protocole et réimplémenter la DLL moi-même, ce qui me permettra d'exécuter cette application sur une machine Linux?

Cette idée a été inspirée par cette item about QT creator donc toute solution qui me permet de jouer avec ce serait extra cool.

+1

Le vin est tellement complet de nos jours, donc le plus simple serait de simplement lancer de tels programmes dans Wine. Si vous pouvez porter le programme à la chaîne d'outils mingw, vous pouvez toujours le maintenir et l'exécuter sur Linux seulement, pas besoin de Windows du tout. Vous pouvez utiliser la marque gnu standard et tout. –

Répondre

6

Le moyen le plus évident serait d'utiliser Winelib. Je ne sais pas si elle peut lier directement à une DLL native, mais sinon vous pourriez probablement le charger avec LoadLibrary().

Vous pouvez ensuite diviser votre application en deux parties: une enveloppe qui appelle uniquement la DLL et le reste du code qui s'adresse à votre wrapper. Vous pourriez avoir les deux dans des processus séparés, et donc seul le wrapper devrait être compilé avec Winelib. Le reste de l'application peut alors utiliser le framework de votre choix.

Questions connexes