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

Résolu
Messages postés
2167
Date d'inscription
mardi 11 novembre 2003
Statut
Membre
Dernière intervention
16 juillet 2009
-
Messages postés
2167
Date d'inscription
mardi 11 novembre 2003
Statut
Membre
Dernière intervention
16 juillet 2009
-
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

Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
41
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 #
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
133
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.
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
133
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 !
Messages postés
2167
Date d'inscription
mardi 11 novembre 2003
Statut
Membre
Dernière intervention
16 juillet 2009
1
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
Messages postés
354
Date d'inscription
mercredi 18 décembre 2002
Statut
Membre
Dernière intervention
24 mars 2011
2
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
Messages postés
2167
Date d'inscription
mardi 11 novembre 2003
Statut
Membre
Dernière intervention
16 juillet 2009
1
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