DLL C++ [Résolu]

Signaler
Messages postés
71
Date d'inscription
mercredi 15 novembre 2000
Statut
Membre
Dernière intervention
29 mars 2007
-
Messages postés
337
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
15 avril 2006
-
Salut,

Je veux écrire un programme en C++ qui doit à priori tourner sur une plateforme UNIX, avec des commandes Shell.

Cependant, j'aimerais (dans un futur plus ou moins proche) pouvoir porter mon appli sous Windows. Je souhaiterais alors créer une IHM VB.

Mon idée est de créer une DLL à partir du programme original (je me serai assurer au préalable que le programme est portable). Pour info, j'ai à ma disposition Visual Studio 6 et Visual .NET.

Questions:
1. est-ce possible ?
2. si oui, comment faire ?

5 réponses

Messages postés
337
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
15 avril 2006

1) Oui c'est possible
2) En programmant en utilisant la norme ANSI. Tu utilise gcc pour compiler pour Unix et mingw pour compiler pour Windows.

/!\ Pour être tout a fait en ordre, tu ne peux compiler avec mingw que des programmes sous une licence compatible avec la GPL. (c à d que tu dois livrer les sources avec ton programme)

Il existe sans doute un equivalent de mingw non libre...Si besoin en est google est ton ami ;)

XbY
-----
Admin du projet PrintTemplate
Messages postés
337
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
15 avril 2006

1)non ... gcc et visual studio .Net ne sont pas compatible... Il faut, sous reserve d'avoir écrit du code portable comme tu dis, que tu compiles ton code avec mingw en ligne de commande de la meme maniere que tu compile du avec gcc. Un petit exemple : http://www.dumbbell.fr/articles/win32-cross-compilation.fr.html#tests

Pour créer une dll il faut utiliser shared. Si tu veux j'ai un exemple de makefile sous la main je peux te le passer.

2) Exact ;)

XbY
-----
Admin du projet PrintTemplate
Messages postés
337
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
15 avril 2006

1) de rien ;)

2) Tu peux egalement faire du code non managé avec visual studio .Net. Maintenant je ne sais pas si tu as l'intention de faire du code managé ou pas... mais sache que si tu n'en a jamais fait avant et si tu ne sais pas du tout ce que c'est tu risque d'être vite perdu... Et puis du C++ managé je trouve pas l'idée terrible. D'autant plus que pour le porter sur unix même si il existe mono ce n'est pas une mince affaire. (A moins de développer directement sur mono)

Si je te disais de compiler avec mingw c'est pour une autre raison. En fait VC++ (que ce soit le compilo de VS.Net ou pas) et gcc ne sont pas compatible. Par exemple dans VS il y a pas mal de librairie ou le .h a été enlever (c a d que tu fait #include <stdio> au lieu de #include <stdio.h> et gcc n'aime pas trop ça). Par contre mingw est un portage de gcc qui permet de faire des executable windows.

3) http://printtemplate.sf.net/hello.tar.gz' target='_blank'>http://printtemplate.sf.net/hello.tar.gz. J'ai mis les source et tout dedans. make pour compiler avec gcc et make mingw pour compiler avec mingw. Il faut evidemment que mingw soit installé. Si t'es sur linux il doit sans doute être dans un package de ta distribution (apt-get install mingw32 pour ubuntu). Si t'es sur windows... je ne sais pas trop mais a mon avis le mieux est d'utiliser cygwin. Tu devra peut etre changer la variable MINGW dans le makefile.
XbY
-----
Admin du projet PrintTemplate
Messages postés
71
Date d'inscription
mercredi 15 novembre 2000
Statut
Membre
Dernière intervention
29 mars 2007

ok,

Si j'ai bien tout compris :

1. sous réserve d'avoir écrit du code portable, je peux faire du copier/coller depuis vi (sous UNIX) vers .NET ou Visual 6 et générer une DLL (en prenant soin de rajouter les déclarations du genre _stdcall)

2. appeler toutes mes fonctions depuis une IHM écrite en VB, voir depuis n'importe quelle appli Windows pour peut que je puisse avoir accès à ma DLL.

Exacte ?

+,
kharrat
Messages postés
71
Date d'inscription
mercredi 15 novembre 2000
Statut
Membre
Dernière intervention
29 mars 2007

XbY,

1.
Merci pour ton aide :)

2.
un copain m'a expliqué que .NET et les exés C++ "standard" ne gèrent pas la mémoire de la même façon. .NET a ce qu'on appelle des objets managés (genre avec des ramasses miettes et d'autres trucs). Par conséquent, il m'a dit qu'il faut créer une interface entre une DLL écrite en C++ et un programme .NET pour convertir les objets en objets managés.

Est-ce la raison pour laquelle tu me dis qu'il faut compilé avec mingw ?

Si oui, mingw fait-il ce travail d'interface et de conversion pour le développeur ?

3. je veux bien ton makefile pour jetter un coup d'oeil dedans !

+,
kharrat