PC SOFT

PROFESSIONAL NEWSGROUPS
WINDEVWEBDEV and WINDEV Mobile

Home → WINDEV 2024 → c++ assembly .NET Windev
c++ assembly .NET Windev
Started by Esteban BERNARD, May, 21 2017 2:51 AM - 5 replies
Registered member
24 messages
Popularité : +2 (2 votes)
Posted on May, 21 2017 - 2:51 AM
Bonjour à vous,

après avoir développé un petit bout de code en c++ je l'ai encapsulé dans un assemblage .NET, cependant je me retrouve face à un problème lors du passage de paramètres. Tant qu'il s'agit de passer des entiers tout va bien.
Toutefois certaines de mes fonctions c++ prennent comme paramètres des variables de type std::string et elles sont reconnues comme "objet dynamique" dans le constructeur de la fonction par windev.
Lorsque je passe une chaîne de caractère de windev j'obtiens donc une erreur me disant qu'il n'existe aucun prototype correspondant à ces paramètres.
Ma question est donc la suivante, comment puis-je passer des chaines en paramètres à mon assemblage pour que cela correspondent au type std::string ?

Merci d'avance pour votre aide,
Message modified, May, 21 2017 - 2:52 AM
Posted on May, 22 2017 - 1:44 PM
Bonjour,

avec un nom pareil, on dirait que tu utilise le typ string de la classe STD.

Si c'est bien ca, du coté windev, il faut intégrer l'assemblage
contenant la classe STD, en déclarer un objet, puis utiliser son type
string.

Cordialement


--
Fabrice Harari
Consultant WinDev, WebDev et WinDev Mobile International

A votre disposition : WXShowroom.com, WXReplication (open source) et
maintenant WXEDM (open source)

Plus d'information sur http://fabriceharari.com


Le 5/20/2017 à 6:51 PM, Esteban BERNARD a écrit :
Bonjour à vous,

après avoir développé un petit bout de code en c++ je l'ai encapsulé
dans un assemblage .NET, cependant je me retrouve face à un problème
lors du passage de paramètres. Tant qu'il s'agit de passer des entiers
tout va bien.
Toutefois certaines de mes fonctions c++ prennent comme paramètres des
variables de type std::string et elles sont reconnues comme "objet
dynamique" dans le constructeur de la fonction par windev. Lorsque je
passe une chaîne de caractère de windev j'obtiens donc une erreur me
disant qu'il n'existe aucun prototype correspondant à ces paramètres. Ma
question est donc la suivante, comment puis-je passer des chaines en
paramètres à mon assemblage pour que cela correspondent au type
std::string ?

Merci d'avance pour votre aide,
Registered member
24 messages
Popularité : +2 (2 votes)
Posted on May, 23 2017 - 12:06 AM
Tout d'abord merci pour votre réponse.

En effet, j'utilise le type string propre à l'espace de nom std. Cependant je n'ai aucune idée de comment trouver un assemblage l'encapsulant.
Dans ce cas est-ce que quelqu'un n'aurait pas une idée pour faire l'inverse, passer une chaîne windev vers un programme c++ d'un assemblage et dans ce cas quel type de paramètre préciser dans le programme c++ ?
Registered member
962 messages
Popularité : +183 (185 votes)
Posted on May, 23 2017 - 7:14 AM
hello,
va voir ici :
https://www.developpez.net/forums/d309219/c-cpp/outils-c-cpp/visual-cpp/cpp-cli/cast-std-string-to-system-string/

System.String ==> std.string
std.string ==> System.String
si cela correspond à ce que tu veux faire.

--
Ami calmant, J.P
Registered member
24 messages
Popularité : +2 (2 votes)
Posted on May, 25 2017 - 6:00 PM
Oui Merci, c'est en effet c'est que je voulais faire, j'avais également trouvé cette information avant de voir votre message. Il me reste désormais à trouver le même genre de conversion pour les tableaux vers vector, et point vers point :)
Registered member
24 messages
Popularité : +2 (2 votes)
Posted on May, 31 2017 - 3:10 AM
Bon alors après quelques recherche j'ai réussi à faire la liaison entre vector et system.array pour passer des tableaux d'int ou de float entre mon code c++/cli et mon code windev cependant pour passer des tableaux de System.Drawing.Point impossible.

Je m'explique,

voilà en gros mon code pour le remplissage et l'initialisation de mon tableau :
array< System::Drawing::Point >^ centers;
centers = gcnew array< System::Drawing::Point >(greatAxis.size());
for (int i = 0; i < greatAxis.size(); i++){
    centers[i] = System::Drawing::Point(0,0);
}


et voilà mon getter :
array< System::Drawing::Point >^ SegImg::getManagedCenters(){
return centers;
}


Et dans windev j'essaie de récupérer le résultat comme suit :
p est un tableau de n System.Drawing.Point = t:getManagedCenters()


Toutefois lorsque je regarde le contenu du tableau j'obtiens seulement des objets non initialisés.

Même chose lorsque j'essaye directement de créer un objet System.Drawing.Point et de l'initialiser dans windev :
d est un System.Drawing.Point(0,0)


Merci d'avance,
Message modified, May, 31 2017 - 3:12 AM