Обертка класса (Native C ++) с использованием управляемого C ++, как быть с нативной структурой? - PullRequest
0 голосов
/ 08 марта 2012
namespace mcWrapper {
struct S1
{
    int n1;
    int n2;
};
class C1
{
public:
    void Test(S1* ps1)
    {

    };
};

public ref class Class1Wrapper
{
public:
    Class1Wrapper()
    {           
        _pC1 = new C1();
    };
    void Test(S1* ps1)
    {
        _pC1->Test(ps1);
    }
private:
    C1* _pC1;
};}

Создайте его, мы можем получить .net dll.

Создать клиент C # для использования этой dll:

//c#    
 public Form1()
    {
        InitializeComponent();            
        var c1 = new mcWrapper.Class1Wrapper();
        //we can find Test method , but we cannot type codes like: s1*
        c1.Test()//?????????????????????????????????

    }

Я не могу запустить Class1Wrapper.Test в c #.

Затем я попытался изменить Test () на Test (int ^ n), я нашел c # объяснение Test (int ^ n) как Test (ValueType n) Я был сбит с толку, все.

1 Ответ

0 голосов
/ 11 марта 2012

Итак, что я должен сделать, это установить новую управляемую структуру, такую ​​как:

public value struct CsS1{int n1;int n2} 

И затем измените Test (...) с

Class1Wrapper::Test(S1* ps1){_pc1->Test(ps1);}

К

Class1Wrapper::Test(CsS1* pcs1)
{
    S1* ps1 = new S1(); 
    ps1.n1=pcs1.n1; 
    ps1.n2=pcs.n2;
    _pc1->Test(ps1);
    delete ps1;
}

Это тяжелая работа для обертки. и я думаю, что это напрасная трата времени. Другого пути нет?

...