Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Création dll en C

9 réponses
Avatar
Patrice Henrio
Mes trois semaines de vacances m'ont permis de tester l'idée de Jean-Marc
d'écrire les fonctions (les plus simples) en C++ et de les appeler via une
dll.
Tout simplement génial : je divise le temps d'exécution par trois.
Autre intérêt de la chose, mes fonctions étant dans une boîte noire, je ne
suis pas tenté de les ré-écrire chaque fois que je veux modifier un détail.
Par contre, je préfère mettre ma dll dans le répertoire de l'exécutable,
cela impose que le répertoire courant reste celui de l'application mais cela
ne me parait pas trop rédhibitoire. Enfin peut-être y-a-t'il un défaut à
cette méthode que je n'aurai pas imaginé, merci de me donner vos avis sur
cette question.
Donc encore un grand merci à Jean-Marc qui m'a permis de progresser dans ce
domaine.

9 réponses

Avatar
Jean-Marc
"Patrice Henrio" a écrit dans le message de
news:
Mes trois semaines de vacances m'ont permis de tester l'idée de Jean-Marc
d'écrire les fonctions (les plus simples) en C++ et de les appeler via une
dll.
Tout simplement génial : je divise le temps d'exécution par trois.
Autre intérêt de la chose, mes fonctions étant dans une boîte noire, je ne
suis pas tenté de les ré-écrire chaque fois que je veux modifier un


détail.
Par contre, je préfère mettre ma dll dans le répertoire de l'exécutable,
cela impose que le répertoire courant reste celui de l'application mais


cela
ne me parait pas trop rédhibitoire. Enfin peut-être y-a-t'il un défaut à
cette méthode que je n'aurai pas imaginé, merci de me donner vos avis sur
cette question.
Donc encore un grand merci à Jean-Marc qui m'a permis de progresser dans


ce
domaine.



Hello,

mettre la dll dans le répertoire de l'exe est une très bonne idée.
Moins on met de choses dans Windows, ou winsystem ou winsystem32
et mieux c'est. Une bonne idée donc. Si par hasard un jour cela
devenait un problème, pour je ne sais quel raison, il suffirait
de la déplacer et de la registrer avec regsvr32.

Et, merci du merci, ça fait plaisir :-)

--
Jean-marc
"There are only 10 kind of people
those who understand binary and those who don't."
mailto: remove '_no_spam_' ;
Avatar
Jean-Marc
"Patrice Henrio" a écrit dans le message de
news:
Mes trois semaines de vacances m'ont permis de tester l'idée de Jean-Marc
d'écrire les fonctions (les plus simples) en C++ et de les appeler via une
dll.
Tout simplement génial : je divise le temps d'exécution par trois.




Encore une petite chose:

J'avais illustré dans un benchmark que pour un exemple donné,
les temps de calcul obtenus étaient:

VB Pur : 12
VB + Dll en C : 4 (temps d'exécution divisé par 3)
C pur : 1

(cf http://membres.lycos.fr/jeanmarcn/bench/bench3.htm)

Patrice confirme ici, avec un cas concret, les résultats
que j'obtenais: le compromis VB+C Dll est 3 fois plus rapide
que le VB pur.

Belle illustration :-)

--
Jean-marc
"There are only 10 kind of people
those who understand binary and those who don't."
mailto: remove '_no_spam_' ;
Avatar
Carrère Loïc
Salut,

Je suis un peu hors sujet mais j'aimerai tant comprendre...


Cette ligne: EstPairVB = ((n And 1) = 0)

Je n'ai pas du écouter en cours et maintenant je ne comprend pas
comment (n And 1) = 0 indique si n est pair ou non.

Si vous pouviez m'éclairer...

Merci!

Après mure réflexion, Jean-Marc a écrit :
"Patrice Henrio" a écrit dans le message de
news:
Mes trois semaines de vacances m'ont permis de tester l'idée de Jean-Marc
d'écrire les fonctions (les plus simples) en C++ et de les appeler via une
dll.
Tout simplement génial : je divise le temps d'exécution par trois.




Encore une petite chose:

J'avais illustré dans un benchmark que pour un exemple donné,
les temps de calcul obtenus étaient:

VB Pur : 12
VB + Dll en C : 4 (temps d'exécution divisé par 3)
C pur : 1

(cf http://membres.lycos.fr/jeanmarcn/bench/bench3.htm)

Patrice confirme ici, avec un cas concret, les résultats
que j'obtenais: le compromis VB+C Dll est 3 fois plus rapide
que le VB pur.

Belle illustration :-)




--
http://www.gdpicture.com
http://www.gdpicture.com
Avatar
Loïc
Je crois que j'ai compri tout seul. And compare le dernier bit de n
avec le bit 1 ?


Après mure réflexion, Carrère Loïc a écrit :
Salut,

Je suis un peu hors sujet mais j'aimerai tant comprendre...


Cette ligne: EstPairVB = ((n And 1) = 0)

Je n'ai pas du écouter en cours et maintenant je ne comprend pas comment (n
And 1) = 0 indique si n est pair ou non.

Si vous pouviez m'éclairer...

Merci!

Après mure réflexion, Jean-Marc a écrit :
"Patrice Henrio" a écrit dans le message de
news:
Mes trois semaines de vacances m'ont permis de tester l'idée de Jean-Marc
d'écrire les fonctions (les plus simples) en C++ et de les appeler via une
dll.
Tout simplement génial : je divise le temps d'exécution par trois.




Encore une petite chose:

J'avais illustré dans un benchmark que pour un exemple donné,
les temps de calcul obtenus étaient:

VB Pur : 12
VB + Dll en C : 4 (temps d'exécution divisé par 3)
C pur : 1

(cf http://membres.lycos.fr/jeanmarcn/bench/bench3.htm)

Patrice confirme ici, avec un cas concret, les résultats
que j'obtenais: le compromis VB+C Dll est 3 fois plus rapide
que le VB pur.

Belle illustration :-)





--
Loïc
Avatar
Vincent Guichard
Carrère Loïc a écrit :
Salut,

Je suis un peu hors sujet mais j'aimerai tant comprendre...


Cette ligne: EstPairVB = ((n And 1) = 0)

Je n'ai pas du écouter en cours et maintenant je ne comprend pas comment
(n And 1) = 0 indique si n est pair ou non.

Si vous pouviez m'éclairer...

Merci!



En VB, And peut être un opérateur logique (le && du C) ou booléen (de
comparaison bit à bit, le & du C).
(n And 1) vaudra 1 si le bit de poids faible est à 1, 0 sinon.

Vincent Guichard
Avatar
Loïc
Merci Vincent.

Dans ce cas on pourait optimiser la fonction comme ceci:


Private Function NestPasPairVB(n As Long) As Boolean
NestPasPairVB = (n And 1)
End Function

:')


Vincent Guichard a exposé le 11/08/2005 :
Carrère Loïc a écrit :
Salut,

Je suis un peu hors sujet mais j'aimerai tant comprendre...


Cette ligne: EstPairVB = ((n And 1) = 0)

Je n'ai pas du écouter en cours et maintenant je ne comprend pas comment (n
And 1) = 0 indique si n est pair ou non.

Si vous pouviez m'éclairer...

Merci!



En VB, And peut être un opérateur logique (le && du C) ou booléen (de
comparaison bit à bit, le & du C).
(n And 1) vaudra 1 si le bit de poids faible est à 1, 0 sinon.

Vincent Guichard



--
Loïc
Avatar
Patrice Henrio
Non on a déjà répondu à cette remarque, les booléens doivent rester des
booléens pour ne pas dépendre de la méthode d'implantation ceux-ci.
Certains langages considèrent vrai à -1 (huit bits à 1), d'autres à 1 (le
premier bit seulement à 1), d'autres enfin toute valeur différente de 0.
La fonction NestPasPair devant renvoyer un booléen, il faut bien le
transmettre en tant que tel.
Par contre en C, cette fonction renverrai un entier, par exemple 1 pour
impair et 0 pour pair, mais dans ce cas c'est la fonction mod avec le
deuxième argument égal à 2.

"Loïc" a écrit dans le message de news:

Merci Vincent.

Dans ce cas on pourait optimiser la fonction comme ceci:


Private Function NestPasPairVB(n As Long) As Boolean
NestPasPairVB = (n And 1)
End Function

:')


Vincent Guichard a exposé le 11/08/2005 :
Carrère Loïc a écrit :
Salut,

Je suis un peu hors sujet mais j'aimerai tant comprendre...


Cette ligne: EstPairVB = ((n And 1) = 0)

Je n'ai pas du écouter en cours et maintenant je ne comprend pas comment
(n And 1) = 0 indique si n est pair ou non.

Si vous pouviez m'éclairer...

Merci!



En VB, And peut être un opérateur logique (le && du C) ou booléen (de
comparaison bit à bit, le & du C).
(n And 1) vaudra 1 si le bit de poids faible est à 1, 0 sinon.

Vincent Guichard



--
Loïc



Avatar
Loïc
Autant pour moi. C'est vrai que je comptais sur une convertion
implicite de vb ce qui finalement après tests revient au même en temps
d'exécution.

Le même bench avec vb.net serait intéressant! :)


Patrice Henrio a utilisé son clavier pour écrire :
Non on a déjà répondu à cette remarque, les booléens doivent rester des
booléens pour ne pas dépendre de la méthode d'implantation ceux-ci.
Certains langages considèrent vrai à -1 (huit bits à 1), d'autres à 1 (le
premier bit seulement à 1), d'autres enfin toute valeur différente de 0.
La fonction NestPasPair devant renvoyer un booléen, il faut bien le
transmettre en tant que tel.
Par contre en C, cette fonction renverrai un entier, par exemple 1 pour
impair et 0 pour pair, mais dans ce cas c'est la fonction mod avec le
deuxième argument égal à 2.

"Loïc" a écrit dans le message de news:

Merci Vincent.

Dans ce cas on pourait optimiser la fonction comme ceci:


Private Function NestPasPairVB(n As Long) As Boolean
NestPasPairVB = (n And 1)
End Function

:')


Vincent Guichard a exposé le 11/08/2005 :
Carrère Loïc a écrit :
Salut,

Je suis un peu hors sujet mais j'aimerai tant comprendre...


Cette ligne: EstPairVB = ((n And 1) = 0)

Je n'ai pas du écouter en cours et maintenant je ne comprend pas comment
(n And 1) = 0 indique si n est pair ou non.

Si vous pouviez m'éclairer...

Merci!



En VB, And peut être un opérateur logique (le && du C) ou booléen (de
comparaison bit à bit, le & du C).
(n And 1) vaudra 1 si le bit de poids faible est à 1, 0 sinon.

Vincent Guichard



-- Loïc






--
Loïc
Avatar
ng
Salut,


mettre la dll dans le répertoire de l'exe est une très bonne idée.
Moins on met de choses dans Windows, ou winsystem ou winsystem32
et mieux c'est. Une bonne idée donc. Si par hasard un jour cela
devenait un problème, pour je ne sais quel raison, il suffirait
de la déplacer et de la registrer avec regsvr32.



Non ! ici on a a faire ç une dll "classique", pas COM ! Donc pas
d'inscription dans le registre vace regsvr32.

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/