Bonjour,
Je me trouve devant un épineux problème d'access violation ...
J'ai une application C#.Net qui doit utiliser une librairie C++ native.
Je me suis donc attelé à écrire un wrapper C++/cli pour permettre la communication.
Ma solution VS se compose donc comme suit :
- un projet C#
- un projet C++ mixte avec des classes CLI et des classes en natif
Le projet c++ est lié à la bibliothèque native (mapnik) que je veux wrapper et le projet C# est lié au projet C++.
A plusieurs endroits de mon code c++ natif, les méthodes prennent des arguments de type std::string.
Qu'à cela ne tienne, je converti les System::String^ en std String seulement voilà :
En debug step, by step, dans le constructeur de ma classe native prenant un std::string, si je regarde la valeur de mon paramètre, le texte est correcte.
Mais juste après, avoir créer mon objet, le C# appelle indirectement une méthode de mon objet fraichement instancié et là, crack ! dans la méthode, la valeur de ma variable d'instance vaut tout sauf la valeur affectée dans le constructeur ...
J'ai lu ici (sans bien tout comprendre) que ça pourrait venir du fait que les objets seraient déclarés/instanciés dans des dll différentes.
D'où mon idée de vouloir recréer un nouveau string dans le constructeur de ma classe qui éviterait un pointeur vers une zone mémoire incertaine.
(Si tant est que j'ai bien identifié le problème)
Mon niveau de C++ est assez basique et là c'est clairement en dehors de mon domaine de compréhension![]()
Partager