Urgent dll point d'entree

28marc28 Messages postés 39 Date d'inscription jeudi 10 avril 2003 Statut Membre Dernière intervention 4 juin 2014 - 18 juin 2011 à 19:26
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 - 19 juin 2011 à 19:12
Bonsoir,

Je viens de trouver une dll avec un .h et .lib.

Sur le site du fournisseur elle est en libre.

Le problème c'est que je n'arrive pas à trouver un point d'entrée malgrès les infos qui sont dans le .h

Voici mon code:

dans le module:

Public Declare Function Version Lib "C:\temp\isam\RealIsam.dll" () As Long

dans une form pour test :

Dim G As Long

G = Version





J'ai une erreur 453 en permanence.

Avez-vous une idée ??????

voici le lien ou j'ai télécharger cette dll:

http://translate.googleusercontent.com/...

par avance merci.

28marc28

5 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
18 juin 2011 à 23:08
Salut

D'après ce que je vois dans le fichier ".h", la fonction Version ne renvoie pas de chaine, mais un numérique, comme toute fonction de DLL que je connaisse d'ailleurs.
D'après ce fichier .h, il semble qu'il faille passer une variable "char *p", donc qqchose qui doit s'apparenter à une String.
Il faudrait savoir aussi ce que représente l'étoile.
MAIS, dans ce genre de langage plus proche de la machine que VB, on fournit en général le pointeur vers la chaine (ou tableau de bytes) et jamais-rarement une chaine elle même.
Quand il s'agit d'une chaine de longueur fixe, c'est assez facile avec VarPtr. Mais quand la chaine est de longueur libre, ça se complique puisque VarPtr donne l'adresse où se trouve la longueur de la chaine (Long VB6), suivie de la chaine elle même. Donc, il faut :
- lire le contenu du pointeur pour connaitre la longueur (4 octets)
- préparer une chaine de réception de même longueur
- recopier la chaine située 4 octets après ce pointeur et il faut jongler avec le RTLMove alias CopyMemory (API).

(3 min plus tard)
Oui, l'étoile dans Char *p précise qu'il s'agit d'un pointeur, donc d'un Long VB6.
Mais bon, même avec un Long, je n'ai pas réussi à récupérer quoi que ce soit et j'ai la même erreur de "point d'entrée" que toi.

D'après ce que je viens de lire dans les précédentes questions du forum à propos des DLL en C (que tu as surement dû lire aussi, j'espère), il vaut mieux placer ta DLL dans le répertoire adéquat : System32 ou, au pire, sur le répertoire de l'application, mais imposer un chaînage de répertoire dans la déclaration, c'est pas recommandé et cela posera forcément des problèmes le jour où tu déplaces ton projet.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
28marc28 Messages postés 39 Date d'inscription jeudi 10 avril 2003 Statut Membre Dernière intervention 4 juin 2014
19 juin 2011 à 07:23
Merci Jack,

Donc pour toi elle est inexploitable aussi ?

Je me demandais si on ne pouvais pas refaire une dll à partir de C++ en incluant celle-ci ?

28marc28
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
19 juin 2011 à 11:05
Je ne sais pas.
J'ai lu qu'il y avait une méthode de compilation de la DLL qui ne permettait pas d'interfacer avec VB6 - il faudrait qu'elle soit compilée en utilisant __stdcall

Essaye déjà de voir si le fichier .h donne des infos au sens ".Net" ou pas, pour déterminer si les "int" sont des integer de 2 octets (VB6) ou 4 octets (.Net)

Un peu de lecture :
http://support.microsoft.com/kb/205277/en-us,
http://edais.mvps.org/Tutorials/CDLL/index.html
0
28marc28 Messages postés 39 Date d'inscription jeudi 10 avril 2003 Statut Membre Dernière intervention 4 juin 2014
19 juin 2011 à 13:28
Oui je crois que quand il y a stdcall, cela fait qu'elle est com.

Je vais essayer de l'inclure dans C++ en refabriquant une dll avec stdcall et on va voir si cela fonctionne.

Je te tiens au courant, histoire de voir ce que cela donne.

28marc28
0

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

Posez votre question
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
19 juin 2011 à 19:12
__stdcall précise seulement la convention d'appel (idem que les APIs Windows). Par défaut c'est __cdecl.

VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
0
Rejoignez-nous