OVH Cloud OVH Cloud

[VC++ .NET] Passage d'argument à une fonction

3 réponses
Avatar
Sylvain Bénot
Bonjour,

J'ai bidouillé rapidement le C++ managé dans Visual Studio .NET et j'ai
pas réussi à faire une fonction avec un paramètre passé par "valeur"
genre fct(int* arg) ou fct(int& arg).

C'est moi qui est merdé ou ça ne fonctionne plus comme ça ?

Merci

Sylvain

3 réponses

Avatar
adebaene
Sylvain Bénot wrote in message news:...
Bonjour,

J'ai bidouillé rapidement le C++ managé dans Visual Studio .NET et j'ai
pas réussi à faire une fonction avec un paramètre passé par "valeur"
genre fct(int* arg) ou fct(int& arg).


Ca, ce n'est pas du passage par valeur mais du passage par référence
(ou poointeur). Le passage par valeur c'est fct(int arg).

C'est moi qui est merdé ou ça ne fonctionne plus comme ça ?


Ca marche très bien. Peux-tu poster un exemple de code qui démontre le
problème?

Arnaud
Avatar
Sylvain Bénot
Salut !!

Arnaud Debaene a écrit:
Sylvain Bénot wrote in message news:...

Bonjour,

J'ai bidouillé rapidement le C++ managé dans Visual Studio .NET et j'ai
pas réussi à faire une fonction avec un paramètre passé par "valeur"
genre fct(int* arg) ou fct(int& arg).



Ca, ce n'est pas du passage par valeur mais du passage par référence
(ou poointeur). Le passage par valeur c'est fct(int arg).



Exact, je mélange toujours les appelations !!!!!



C'est moi qui est merdé ou ça ne fonctionne plus comme ça ?



Ca marche très bien. Peux-tu poster un exemple de code qui démontre le
problème?



J'ai juste oublié une petite précision, c'est que j'utilise la class
faite en C++ managé dans du VB ensuite.

Voici mon petiti bout de code :

========== C++ ============================== namespace Test
{
public __gc class Class1
{
public:
// TODO : ajoutez ici vos méthodes pour cette classe.
void fct(int val);
void fct1(int* val );
void fct2(int &val );
};
}

void Test::Class1::fct( int val )
{
val = val + 1;
}

void Test::Class1::fct1( int* val )
{
*val = *val + 1;
}

void Test::Class1::fct2( int& val )
{
val = val + 1;
}

============== VB ===================================
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
Dim toto As New Test.Class1
Dim x As Integer

x = 4
toto.fct(x) 'Appel de fct correct mais x pas modifié
MessageBox.Show(CStr(x))
toto.fct1() 'fct1 a un type de retour ou des types de paramètres
non pris en charge
MessageBox.Show(CStr(x))
toto.fct2(x) 'fct2 a un type de retour ou des types de paramètres
non pris en charge
MessageBox.Show(CStr(x))
End Sub

Voilà pourquoi je disais que ça ne marche pas.
J'ai merdé alors ou ce n'est plus possible ?

Merci

Sylvain


Arnaud


Avatar
Ambassadeur Kosh
> void fct(int val);
void fct1(int* val );
void fct2(int &val );



toto.fct(x) 'Appel de fct correct mais x pas modifié


normal. tu passes une copie du x.

toto.fct1() 'fct1 a un type de retour ou des types de paramètres
non pris en charge



ben oui, fct1 prend un parametre, donc normal.

toto.fct2(x) 'fct2 a un type de retour ou des types de paramètres
non pris en charge



la je sais pas. peut être lui preciser un truc genre
toto.fct2(ref x)

Voilà pourquoi je disais que ça ne marche pas.


on ne peut pas dire ça.

J'ai merdé alors ou ce n'est plus possible ?


ça doit forcément être possible.
on ne peut pas dire que tu as merdé.
cette assertion est donc probablement fausse :o)