OCX fait en C++/C# compatibles VB6 ??

Résolu
MadM@tt Messages postés 2167 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 16 juillet 2009 - 7 août 2006 à 12:31
MadM@tt Messages postés 2167 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 16 juillet 2009 - 7 août 2006 à 15:21
Salut à tous,

j'aurais une question à propos des ocx (et dll aussi tiens). Je voulais savoir si je pouvais recoder certains ocx de mes programmes VB en C++ ou C# (afin de gagner en rapidité et de m'initier à d'autres langages) sans problème.
Enfin pour le C++ je pense que c'est faisable (mais j'attend confirmation) mais pour le C# comme lui il utilise le framework.net je ne sais pas du tout.

Merci pour vos réponses.

PS : je ne sais pas si j'ai été assez précis mais le truc c'est d'intégrer un ocx fait en C++ ou C# dans un prog VB

Ciaò
[mailto:madmatt_12@msn.com MadMatt]
www.madmatt.fr.st

6 réponses

cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
7 août 2006 à 13:23
Salut,

Je vais dans le même sens que Dark. Effectivement, je ne pense pas que tu puisse gagner énormément à coder un ocx en C++.
Quitte à apprendre un nouveau langage, il vaut mieux que tu t'oriente vers le codage d'une dll standard en C ou C++. Dans ce cas, les gains de performances devraient etre un peu plus significatifs. De plus ça te permettra de revoir et mettre à jour l'algorithme de ton composant. Ne t'attend pas à des miracles non plus. Le passage en dll C vaut le coup lorsque tu as des traitements longs ou lourds, ou lorsque tu cherche la possibilté de travailler en tache de fond (multithreading). Si c'est pour faire de petites fonctions toutes simples, tu auras très peu de gain (tout gain potentiel sera en partie perdu par les appels aux fonctions de la dll).

De plus si tu utilise .net, il me semble que le mot d'ordre est d'utiliser de moins en moins les ocx, et de privilégier les classes.

Je te confirme que le monde professionnel utilise bien le vb notamment dans le domaine industriel car c'est un langage relativement facile à mettre en oeuvre. C'est probablement moins vrai pour les domaines qui touchent aux services, gestion de données, etc ...

Sevyc64  (alias Casy)<hr align="center" size="2" width="100%" /><stron></stron># LE PARTAGE EST NOTRE FORCE #
3
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
7 août 2006 à 13:32
Une dll C est beaucoup plus rapide qu'une dll ActiveX !
L'avantage, c'est quelle est codée en C, et que l'appel de la fonction est "peu" coûteux (environ 16 ms il me semble) à partir d'un prog VB6.

Il s'agit ni plus ni moins d'un fichier contenant des fonctions compilées que tu appelles à partir de ton code. Comme pour les fonctions de l'API standard de Windows, il te faut déclarer les fonctions dans ton code VB pour pouvoir les utiliser (la fameuse instruction Declare).
L'inconvénient : j'ai jamais réussi jusqu'à maintenant à intégrer des classes C++ dans une dll C, ce qui en limite pas mal l'utilité du coup ! C'est vraiment pratique pour des fonctions demandant de gros calculs (tels que des algorithmes de calcul de plus court chemin par exemple) avec peu d'appels de fonctions.
Par contre, si l'exécution de la fonction ne doit pas durer très longtemps, alors il peux être plus bénéfique de la coder directement en VB car on fait l'économie du coût l'appel de fonction de la dll (donc environ 16 ms à chaque appel), ce qui n'est pas négligeable !
Une dll ActiveX a l'avantage d'être facilement utilisable dans différents langage, et permet une approche objet, cependant, l'instanciation et les appels de fonctions sont beaucoup plus lourd qu'une "vraie" dll.

L'écriture d'une dll en C n'est pas compliquée, il suffit d'écrire la fonction en C, puis d'écrire un fichier d'exportation qui n'est pas compliqué à rédiger. Il reste alors plus qu'à le compiler (sous Visual C++ 6 par exemple).
Attention cependant, il s'agit uniquement de code C, et non de C++.NET ou C# !
De plus, tu trouvera quelques exemples sur cppfrance.
3
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
7 août 2006 à 12:47
Ne t'attends surtout pas à y gagner beaucoup niveau performances : j'avais fait la même chose pour ma dll de gestion d'image histoire de profiter de la rapidité du C++, tout en gardant la facilité d'utilisation des ActiveX.
Moralité : un gain de l'ordre de 4 à 5 %, avec une perte de temps d'environ 300 % (c'est bien plus dur de coder un activeX en C++ qu'en vb !!!).
Pourquoi ? Parce que c'est l'architecture même de l'activeX qui bride les performances : un appel de fonction par exemple est très lent pour une dll ActiveX par rapport à une "vraie" dll C !
Maintenant, avec .NET, l'avantage doit être encore moins probant car limité par le framework !!!

Bref un bon conseil : ne perd pas de temps à essayer de traduire un activeX VB en C++, il vaut mieux utiliser ce temps à optimiser l'algorithme utilisé, ce sera bien plus profitable !
0
MadM@tt Messages postés 2167 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 16 juillet 2009 1
7 août 2006 à 13:05
Merci pour la réponse, effectivement si ça ne fait pas gagner énormément en rapidité... Mais je me dis qu'il faudra bien que j'apprenne le C++ un jour (je suis encore étudiant et je ne pense pas que dans le monde professionel ils utilisent le vb ^^). Enfin il faudrait peut etre que je me mette d'abord à des programmes entiers et simples plutot qu'à des dll et ocx.
Par contre j'ai une nouvelle question : tu parlais de la différence entre dll activex et dll C, et c'est vrai que j'ai jamais fait attention à la dénomination activex mais une dll C normale c'est beaucoup plus rapide ? et où est la différence, enfin est ce que je pourrais l'utiliser dans vb ?
Merci en tout cas pour ta réponse

Ciaò
[mailto:madmatt_12@msn.com MadMatt]
www.madmatt.fr.st
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_darunia Messages postés 354 Date d'inscription mercredi 18 décembre 2002 Statut Membre Dernière intervention 24 mars 2011 2
7 août 2006 à 14:52
Je suis plutot d'accord avec les autres : les ActiveX et le C++ ne font pas forcement tres bon menage !
Par contre, il est tout a fait possible d'integrer du C++ dans une DLL !
Certes, tu ne peux pas exporter une classe, mais on peut feinter exportant une fonction par methode :

class Test
{
    public:
    int methode();
}

int __stdcall Test_methode(Test* objet)
{
    return objet->methode();
}

Bon, OK c'est un peu du bricolage ...

D@runia
0
MadM@tt Messages postés 2167 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 16 juillet 2009 1
7 août 2006 à 15:21
Merci pour vos réponses, c'est exactement ce que j'attendais. Bon alors je crois que les activex vont etre remis à plus tard comme l'a dit DKS, et je vais me concentrer sur l'optimisation.
Sinon je verrais ce qu'il est possible de faire avec une dll C

Merci beaucoup

Ciaò
[mailto:madmatt_12@msn.com MadMatt]
www.madmatt.fr.st
0
Rejoignez-nous