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

cs_sena Messages postés 126 Date d'inscription jeudi 9 janvier 2003 Statut Membre Dernière intervention 15 février 2005 - 11 avril 2003 à 10:59
cs_sena Messages postés 126 Date d'inscription jeudi 9 janvier 2003 Statut Membre Dernière intervention 15 février 2005 - 11 avril 2003 à 14:41
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

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
11 avril 2003 à 11:18
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...
0
cs_sena Messages postés 126 Date d'inscription jeudi 9 janvier 2003 Statut Membre Dernière intervention 15 février 2005
11 avril 2003 à 11:28
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 !!!!!!
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
11 avril 2003 à 11:33
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...
0
cs_sena Messages postés 126 Date d'inscription jeudi 9 janvier 2003 Statut Membre Dernière intervention 15 février 2005
11 avril 2003 à 12:04
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?
0

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

Posez votre question
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
11 avril 2003 à 12:21
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...
0
cs_sena Messages postés 126 Date d'inscription jeudi 9 janvier 2003 Statut Membre Dernière intervention 15 février 2005
11 avril 2003 à 12:40
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?
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
11 avril 2003 à 12:44
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...
0
cs_sena Messages postés 126 Date d'inscription jeudi 9 janvier 2003 Statut Membre Dernière intervention 15 février 2005
11 avril 2003 à 13:57
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 ....
0
cs_sena Messages postés 126 Date d'inscription jeudi 9 janvier 2003 Statut Membre Dernière intervention 15 février 2005
11 avril 2003 à 14:09
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)
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
11 avril 2003 à 14:14
Pourquoi le meme nom, rajoute Ex a la fin de celle a 2 params pour dire extend comme fait dans API Windows.
BruNews, ciao...
0
cs_sena Messages postés 126 Date d'inscription jeudi 9 janvier 2003 Statut Membre Dernière intervention 15 février 2005
11 avril 2003 à 14:41
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.
0
Rejoignez-nous