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

Déclaration de dll

8 réponses
Avatar
SAISAS
Bonjour,

j'essaie d'utiliser une dll qui m'a été fournie par un tiers : elle marche
lorsque je compile et que j'exécute le .exe, mais j'ai une erreur 48 si
j'exécute en mode debug?

Quelqu'un saurait-il comment faire?

Merci.

8 réponses

Avatar
Jean-marc
SAISAS wrote:
Bonjour,

j'essaie d'utiliser une dll qui m'a été fournie par un tiers : elle
marche lorsque je compile et que j'exécute le .exe, mais j'ai une
erreur 48 si j'exécute en mode debug?

Quelqu'un saurait-il comment faire?

Merci.



Hello,

c'est un classique :-)

Je suppose que ta dll est dans le répertoire ou est ton appli (et en
particulier le .vbp).

C'est parce que si tu démarres VB en lançant l'exécutable VB, même si tu
charges
ton projet dans le répertoire "c:toto", tu n'es pas "vraiment dans
"c:toto".
Tu es dans "C:Program FilesMicrosoft Visual StudioVB98" (ou équivalent
chez toi). Donc il ne trouve pas la DLL, logique => Error 48.

Quand tu lances l'exe, évidemment ça marche (car cette fois tu es vraiment
dans "c:toto".

Pour remédier au problème:
- lance ton VB en double cliquant sur ton .vbp.

Tu peux aussi mettre ta dll dans c:windows ou c:windowssystem32, ca
marche aussi.

MAIS il y a une autre solution encore plus jolie, plus fiable, plus
élégante,
qui est décrite en détail dans l' (excellent!) article de la FAQ:

http://faq.vb.free.fr/index.php?question4

C'est en bas de l'article.

Bonne lecture :-)

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
mailto: remove '_no_spam_' ;
FAQ VB: http://faq.vb.free.fr/
Avatar
Jean-marc
SAISAS wrote:
Bonjour,

j'essaie d'utiliser une dll qui m'a été fournie par un tiers : elle
marche lorsque je compile et que j'exécute le .exe, mais j'ai une
erreur 48 si j'exécute en mode debug?

Quelqu'un saurait-il comment faire?

Merci.



Re,

Pour compléter la réponse précédente, il y a aussi une
astuce qui peut aider à régler ce problème ici:

Comment savoir si on exécute le programme dans l'IDE ou en dehors
(exécutable) ?
http://faq.vb.free.fr/index.php?question5

A noter: la FAQ vient d'être mise à jour et contient une vingtaine de
nouveaux
articles (144 à 156 plus les mises à jour):
http://faq.vb.free.fr/

On y aborde pas mal de choses, entre autre ce problème d'IDE.

Cordialement,
--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
mailto: remove '_no_spam_' ;
FAQ VB: http://faq.vb.free.fr/
Avatar
SAISAS
Merci pour ta réponse ...

néanmoins, la première chose que j'ai faite quand j'ai eu le problème c'est
de copier ma dll sur c:windowssystem32, puis sur c:windows. Dans les deux
cas, ça ne marche pas ...

J'ai essayé les solutions que tu m'as proposées : la faq 144 est sans effet,
et le fait de démarrer en double-cliquant sur le fichier vbp me permet de
trouvre le fichier, mais génère l'erreur 48.

J'ai aussi essayé de déclarer le composant dans les références, et visual
basic a refusé de le faire, en indiquant que ce n'est pas un composant
compatible (alors que ça marche avec un exécutable).

Quelqu'un a-t-il d'autres idées ?

"Jean-marc" a écrit :

SAISAS wrote:
> Bonjour,
>
> j'essaie d'utiliser une dll qui m'a été fournie par un tiers : elle
> marche lorsque je compile et que j'exécute le .exe, mais j'ai une
> erreur 48 si j'exécute en mode debug?
>
> Quelqu'un saurait-il comment faire?
>
> Merci.

Re,

Pour compléter la réponse précédente, il y a aussi une
astuce qui peut aider à régler ce problème ici:

Comment savoir si on exécute le programme dans l'IDE ou en dehors
(exécutable) ?
http://faq.vb.free.fr/index.php?question5

A noter: la FAQ vient d'être mise à jour et contient une vingtaine de
nouveaux
articles (144 à 156 plus les mises à jour):
http://faq.vb.free.fr/

On y aborde pas mal de choses, entre autre ce problème d'IDE.

Cordialement,
--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
mailto: remove '_no_spam_' ;
FAQ VB: http://faq.vb.free.fr/





Avatar
LE TROLL
Bonjour,

Comme un vbp s'ouvre avec l'éditeur vb, c'est ce que je fais, on lance
le fichier, et non le programme, comme ça tu es dans le répertoire du vbp.
Nonobstant, il faut indiquer aussi au vbp, au code, app.path, drive, dir...
pour que par défaut il aille dans le répertoire du vbp.

--
Merci beaucoup, au revoir et à bientôt :o)
------
Site de MES LOGICIELS
http://irolog.free.fr
Site éditeur de MES ROMANS édités
http://irolog.free.fr/romans
mon adresse EMail
http://irolog.free.fr/ecrire/index.htm
------------------------------------------------------------------------------------
"SAISAS" a écrit dans le message de news:

Bonjour,

j'essaie d'utiliser une dll qui m'a été fournie par un tiers : elle marche
lorsque je compile et que j'exécute le .exe, mais j'ai une erreur 48 si
j'exécute en mode debug?

Quelqu'un saurait-il comment faire?

Merci.


Avatar
SAISAS
Merci ...

mais cela ne fonctionne pas ...

qu'entends tu par il faut indiquer au code ...

"LE TROLL" a écrit :

Bonjour,

Comme un vbp s'ouvre avec l'éditeur vb, c'est ce que je fais, on lance
le fichier, et non le programme, comme ça tu es dans le répertoire du vbp.
Nonobstant, il faut indiquer aussi au vbp, au code, app.path, drive, dir...
pour que par défaut il aille dans le répertoire du vbp.

--
Merci beaucoup, au revoir et à bientôt :o)
------
Site de MES LOGICIELS
http://irolog.free.fr
Site éditeur de MES ROMANS édités
http://irolog.free.fr/romans
mon adresse EMail
http://irolog.free.fr/ecrire/index.htm
------------------------------------------------------------------------------------
"SAISAS" a écrit dans le message de news:

> Bonjour,
>
> j'essaie d'utiliser une dll qui m'a été fournie par un tiers : elle marche
> lorsque je compile et que j'exécute le .exe, mais j'ai une erreur 48 si
> j'exécute en mode debug?
>
> Quelqu'un saurait-il comment faire?
>
> Merci.





Avatar
Jacques93
Bonjour SAISAS,
SAISAS a écrit :
Merci pour ta réponse ...

néanmoins, la première chose que j'ai faite quand j'ai eu le problème c'est
de copier ma dll sur c:windowssystem32, puis sur c:windows. Dans les deux
cas, ça ne marche pas ...

J'ai essayé les solutions que tu m'as proposées : la faq 144 est sans effet,
et le fait de démarrer en double-cliquant sur le fichier vbp me permet de
trouvre le fichier, mais génère l'erreur 48.

J'ai aussi essayé de déclarer le composant dans les références, et visual
basic a refusé de le faire, en indiquant que ce n'est pas un composant
compatible (alors que ça marche avec un exécutable).




Normal pour le dernier point, ce n'est pas une dll ActiveX, mais une
'Flat Dll'.

Suggestion 1 :

Mettre le chemin en dur dans le Declare :

Private Declare Function MyFunction Lib "X:MonCheminMaDll.dll"

Suggestion 2 :

Utiliser les API 'LoadLibrary' et 'GetProcAddress' en combinaison avec
'GetLastError'

Un exemple ici :

http://www.devx.com/vb2themax/Tip/18307

Ceci n'est qu'à titre d'essai, pour comprendre ce qui ce passe.

--
Cordialement,

Jacques.
Avatar
SAISAS
Bonjour,

j'ai effectué deux actions, la première de déclarer mon composant dans
Visual Component Manager, et la seconde de copier dans VB98 la fameuse dll
(j'avais dans le répertoire VB98 une dll mais de longueur 0!).

Et depuis, cela marche.

Je reste néanmoins insatisfait de la solution, puisque je ne peux pas
expliquer ce qui s'est passé!

Merci en tout cas.

"Jacques93" a écrit :

Bonjour SAISAS,
SAISAS a écrit :
> Merci pour ta réponse ...
>
> néanmoins, la première chose que j'ai faite quand j'ai eu le problème c'est
> de copier ma dll sur c:windowssystem32, puis sur c:windows. Dans les deux
> cas, ça ne marche pas ...
>
> J'ai essayé les solutions que tu m'as proposées : la faq 144 est sans effet,
> et le fait de démarrer en double-cliquant sur le fichier vbp me permet de
> trouvre le fichier, mais génère l'erreur 48.
>
> J'ai aussi essayé de déclarer le composant dans les références, et visual
> basic a refusé de le faire, en indiquant que ce n'est pas un composant
> compatible (alors que ça marche avec un exécutable).
>

Normal pour le dernier point, ce n'est pas une dll ActiveX, mais une
'Flat Dll'.

Suggestion 1 :

Mettre le chemin en dur dans le Declare :

Private Declare Function MyFunction Lib "X:MonCheminMaDll.dll"

Suggestion 2 :

Utiliser les API 'LoadLibrary' et 'GetProcAddress' en combinaison avec
'GetLastError'

Un exemple ici :

http://www.devx.com/vb2themax/Tip/18307

Ceci n'est qu'à titre d'essai, pour comprendre ce qui ce passe.

--
Cordialement,

Jacques.



Avatar
LE TROLL
Bonjour, réponse:

Il faut mettre ça pour être certain qu'au moment de l'appel le vbp, et
plus tard l'exe ira dans son répertoire:

ChDrive App.Path
ChDir App.Path

Pour le fait qu'en appelant le fichier vbp, ça ne lance pas VB, il faut
associer ces deux éléments (voir paramétrage OS)...

--
Site de MES LOGICIELS
http://irolog.free.fr
Site éditeur de MES ROMANS édités
http://irolog.free.fr/romans
mon adresse EMail
http://irolog.free.fr/ecrire/index.htm
------------------------------------------------------------------------------------
"SAISAS" a écrit dans le message de news:

Merci ...

mais cela ne fonctionne pas ...

qu'entends tu par il faut indiquer au code ...

"LE TROLL" a écrit :

Bonjour,

Comme un vbp s'ouvre avec l'éditeur vb, c'est ce que je fais, on
lance
le fichier, et non le programme, comme ça tu es dans le répertoire du
vbp.
Nonobstant, il faut indiquer aussi au vbp, au code, app.path, drive,
dir...
pour que par défaut il aille dans le répertoire du vbp.

--
Merci beaucoup, au revoir et à bientôt :o)
------
Site de MES LOGICIELS
http://irolog.free.fr
Site éditeur de MES ROMANS édités
http://irolog.free.fr/romans
mon adresse EMail
http://irolog.free.fr/ecrire/index.htm
------------------------------------------------------------------------------------
"SAISAS" a écrit dans le message de
news:

> Bonjour,
>
> j'essaie d'utiliser une dll qui m'a été fournie par un tiers : elle
> marche
> lorsque je compile et que j'exécute le .exe, mais j'ai une erreur 48 si
> j'exécute en mode debug?
>
> Quelqu'un saurait-il comment faire?
>
> Merci.