-
Novice C++ rech aide
Bonjour,
J'ai besoin de comprendre le fonctionnement d'une DLL écrite en C++.
Une fonction de cette DLL est déclarée ainsi :
Structure_Resultat far pascal Calcul(BSTR *Chaine_donnees)
Que signifie BSTR * ? Le paramètre en entrée est-il bien une chaine de caractères ou son adresse?
Dans le code, est défini :
LPSTR strSrcByRef Que signifie LPSTR ?
puis l'instruction :
strSrcByRef = (LPSTR)*Chaine_donnees Que signifie (LPSTR)* ?
afin de mettre la chaine dans un tableau
for (i=0; i <= 9;i++)
Chaine[i]= *strSrcByRef++
A votre avis quel type de résultat est renvoyé ? En sachant qu'une structure est définie au préalable. La fonction renvoie t'elle la structure ou son adresse ? La fonction se terminant par :
return(resultat) resultat étant une structure définie dans la fonction.
Merci par avance de vos lumières.
-
OK, alors commençons par le commencement:
far et pascal sont obsolètes, remplacés par des #defines sur rien du tout.
Ta fonction devient donc:
Code:
Structure_Resultat Calcul(BSTR *Chaine_donnees)
Ensuite:
LPSTR est un bète typedef sur char*. Mais le cast d'une BSTR en LPSTR est très suspect pour moi, car une BSTR est supposée (normalement) être une chaîne 16 bits. Néanmoins, on peut aussi y mettre des données arbitraires.
Ensuite, le type BSTR, plus important: Une BSTR est une chaîne de caractère sous le format supporté par VB, et utilisé pour les échanges entre objets COM.
On crée une BSTR avec la fonction SysAllocString() et ses soeurs.
Le type BSTR lui-même est un typedef sur wchar_t *, et il pointe directement sur les données de la chaîne. Généralement, on peut passer une BSTR à une fonction qui demande une chaîne unicode, mais pas l'inverse.
Ici, la BSTR en question semble être utilisée pour stocker de simples caractères non-unicodes, voire des données arbitraires n'ayant rien à voir avec des caractères (malgré leur type char, il est possible que ce soient de simples nombres).
-
Merci pour ta réponse.
En complément, ce dont je suis sûr c'est que la chaine en entrée est une chaine de 50 caractères que je dois construire.
Maintenant, je programme en Windev et je dois faire appel à cette dll par l'instruction suivante :
appeldll32("pat32.dll",2,chaine_donnees)
le 2 signifie le numéro de la fonction dans la dll
J'ai tenté de passer la chaine de données directement en paramètre ou alors son adresse, mais ce n'est pas concluant.
Qu'en est il de la nature du résultat renvoyé? Quel est ton avis?
Je rappelle que dans le code de la fonction se situe l'instruction :
return(resultat)
où resultat a été défini comme étant une structure de 8 double.
-
Hélas, je crois bien qu'il n'y a absolument rien de standard pour le retour d'une structure (surtout une grande)