Pour les doués, moi j'en peu plus !

Signaler
Messages postés
126
Date d'inscription
jeudi 9 janvier 2003
Statut
Membre
Dernière intervention
15 février 2005
-
Messages postés
126
Date d'inscription
jeudi 9 janvier 2003
Statut
Membre
Dernière intervention
15 février 2005
-
Salut

je voudrais en fait faire un passage de paramètre a une fonction dont un a une valeur par défaut. (puis inclure ca dnas une DLL)
Par exemple une fonction possède 2 aparamètre et si je veux, je ne passe que le 1er lors de l'appel et l'autre prend automatiquement une valeur qu'on lui attribu par défo.

Ce qui donne ceci en C :

int fonction(char * , int =100);

void main(void)
{
//variable de retour
int retour = 0;
//paramètre
char chaine[20] = "helloworld";

//La je ne passe que le char* donc le int prends la valeur 100
retour = fonction(chaine);
}

int fonction(char * fchaine, int fentier )
{
fchaine[0] = 'a';

if( fentier == 100)
fentier = fentier + 10;
else
fentier = fentier + 2;

return fentier;
}

Bon voila, ca ca marche !

maintenant je voudrais mettre la fonction dans une DLL et l'appelé en VB.
Eh bien ca ne fonctionne pas !
Voila le code que j'ai dans le .cpp de ma dll (je vous ai mis que le code principal)
#include "dll_MA.h"
int EXPORT FonctionMA(char * chaine, int entier)
{
chaine[0] = 19;
entier ++;
return entier;
}
et dans le .h
int EXPORT FonctionMA(char *,int = 100);

En ce qui concerne le code VB
Public Declare Function Dllfonction Lib "dll_MA.dll" Alias "FonctionMA" (ByVal chaine As String) As Integer

Private Sub btn_Ecrire_Click()
Dim Retour As Integer
Dim text As String

text = "letexte"
Retour = Dllfonction(text)
End Sub

En fait ma dll fonctionne quand je n'ai pas de paramètrre par défaut, donc il doit y avoir une astuce pour ce type de paramètres mais la je ne vois pas.... :o(

Quelqu'un a t-il déja fais un truc similaire?

Merci beaucoup d'avance, car moi j'en peu plus !!!!!!

11 réponses

Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
Tu peux pas mettre aussi declaration du param par defaut dans VB ???
Public Declare Function Dllfonction Lib "dll_MA.dll" Alias "FonctionMA" (ByVal chaine As String, ByVal l As Long = 100) As Integer
ou un truc du genre.
BruNews, ciao...
Messages postés
126
Date d'inscription
jeudi 9 janvier 2003
Statut
Membre
Dernière intervention
15 février 2005

Bah non parce que le but c'est que l'appel en VB ne fasse pas apparaitre le deuxième argument
l'idée est de ne mettre que le 1er paramètre et l'autre uniquement si on n'en na besoin.

A l'aide !!!!!!
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
C'est aussi le but que j'esperais atteindre avec cette declaration. Tu as essaye de la mettre et de ne passer qu'1 seul param ?
BruNews, ciao...
Messages postés
126
Date d'inscription
jeudi 9 janvier 2003
Statut
Membre
Dernière intervention
15 février 2005

Ouais mais la compilation ne passe pas si on initialise le 2nd paramètre comme dans la ligne que tu m'as filé.
mais j'aimerais en fait que l'initialisation ne se fasse QUE dans la dll et pas dans le code VB.
Il faut que je fasse plusieurs fonctions différentes?
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
et ..., ByVal l = 100 As Long)
Tu ne dois pas te faire passer 1 seul parm sans le savoir, ta dll doit remonter ESP de 8 octets et si 1 seul param passé par VB fera badaboum.
BruNews, ciao...
Messages postés
126
Date d'inscription
jeudi 9 janvier 2003
Statut
Membre
Dernière intervention
15 février 2005

Ah oui tu veux dire que je suis obligé de déclarer tous mes paramètres en VB.
Et l'initialistaion de mes paramètres se fait dans le code VB et pas dans la DLL?

Mince....
J'aurais voulu faire comme avec une fonction C, c'est a dire comme le bout de code que j'ai mis tout a l'heure :
Si on appelle la fonction avec un seul paramètre l'autre est initialisé automatiquement ....

Donc en fait mon idée n'est pas faisable avec une dll c'est ca?
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
Voila que tu as saisi, sinon qui dira a ta dll combien de params sont passés. Tu en fais 2 modeles et le tour est joué.
BruNews, ciao...
Messages postés
126
Date d'inscription
jeudi 9 janvier 2003
Statut
Membre
Dernière intervention
15 février 2005

Excuse moi pour ma lenteur mais je crois que jétais "enfermé" dans mon idée

Eh bien maintenant excuse mon INCOMPETENCE
mais peux tu me dire ce que tu entends par: "tu en fais deux modèles"?
Je peux faire deux fonctions portant le meme nom mais n'ayant pas le mème nombre d'arguments? (j'a déjà fais avec des type diff. mais pas avec un nb d'arg diférent donc je sais po si c'est faisable...si oui, comment?)

Peux tu me guider STP? (et ce sera fini je t'embète plus...)

MERCI BEAUCOUP POUR TOUT !
DES ESPRITS AUSSI SOLIDAIRES IL EN FAUDRAIT UN PEU PLUS DANS LE MONDE ....
Messages postés
126
Date d'inscription
jeudi 9 janvier 2003
Statut
Membre
Dernière intervention
15 février 2005

C'est bon j'ai testé deux fonctions ayant le meme nom mais po le meme nbre d'arg. CA MARCHE !
ne me reste plus ka tester ca avec une DLL mais ca devrait aller.
Merci encore pour tout :o)
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
Pourquoi le meme nom, rajoute Ex a la fin de celle a 2 params pour dire extend comme fait dans API Windows.
BruNews, ciao...
Messages postés
126
Date d'inscription
jeudi 9 janvier 2003
Statut
Membre
Dernière intervention
15 février 2005

Bah en fait je voulais mettre le meme nom parce que la vrai fonction que je voudrais utiliser a besoin de 3 ou 5 ou 7 paramètres.
Et ca m'embetait de faire 3 fonction avec un nom different.
Mais ceci n'est apparement po possible avec la DLL car je n'arruve po a la compiler. Donc je prends eds noms différents ...

merci encore.