Partager un pointeur entre 2 classes C++/CLI
Bonjour,
J'ai 3 projets: projet C#, projet C++ et projet C++/CLI Wrapper. Mon but est d'utiliser des classes natifs c++ dans un projet C#. C'est pourquoi j'ai créé un projet C++/CLI.
Dans mon projet C++/CLI j'ai 2 classes, classA et classB.
ClassA:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| //classA.h
#pragma once
#include "classB.h"
using namespace System;
namespace Wrapper {
public ref class ClassA
{
public:
ClassA();
virtual ~ClassA();
void setProject( String^ i_project );
private:
String^ m_project;
ClassB^ m_classB;
};
} |
et
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| //classA.cpp
#include "stdafx.h"
#include "classA.h"
using namespace Wrapper;
ClassA::ClassA()
{
m_classB = gcnew ClassB();
}
ClassA::~ClassA()
{
if (m_classB)
delete m_classB;
}
void ClassA::setProject( String^ i_project )
{
m_classB->setProjectFromClassA( i_project );
} |
Class B:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| //classB.h
#pragma once
using namespace System;
namespace Wrapper {
public ref class ClassB
{
public:
ClassB();
virtual ~ClassB();
inline void setProjectFromClassA( String^ i_project ) { m_project= i_project; };
void methodB();
private:
String^ m_project;
};
} |
et
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| //classB.cpp
#include "stdafx.h"
#include "classB.h"
using namespace Wrapper;
ClassB::ClassB()
{
}
ClassB::~ClassB()
{
}
void ClassB::methodB()
{
String^ test = m_project;
} |
Dans mon projet C#, je voudrais réutiliser ces 2 classes A et B:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| using System;
using System.IO;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using Wrapper;
namespace CSharpInterface
{
public partial class Program
{
public ClassA myclassA = new ClassA();
public ClassB myclassB = new ClassB();
public void test()
{
myclassA.setProject("test");
myclassB.methodB();
}
static void Main(string[] args)
{
Program myprogram = new Program();
myprogram.test();
}
}
} |
Mais j'ai un problème lors du debug dans le projet C#.Le string test dans la methodB() de classB reste toujours null. Pourquoi? Comment dois-je implémenter mes classes A et B, ainsi que mon projet C# pour que je puisse bien récupérer le string test dans la methodB()? Avez-vous un exemple de code svp? Je suis forte débutante et un exemple de code m'aiderait beaucoup.
Merci pour votre aide svp.
Cordialement,