Pergunta

void f(cli::array<PointF> ^points){
    PointF& a = points[0];
    // and so on...
}

Erro de compilação na linha 2.

.\ndPanel.cpp(52) : error C2440: 'initializing' : cannot convert from 'System::Drawing::PointF' to 'System::Drawing::PointF &'
        An object from the gc heap (element of a managed array) cannot be converted to a native reference

Qual é a maneira gerenciada de declarar uma variável de referência?

Foi útil?

Solução

Se você deseja apenas declarar uma referência ao primeiro ponto da matriz, então você precisa usar um Referência de rastreamento (%):

void f(cli::array<PointF>^ points)
{    
    PointF% a = points[0];
}

Outras dicas

Você precisa usar o gcroot modelo de vcclr.h Arquivo:

Estas são amostras do MSDN:

// mcpp_gcroot.cpp
// compile with: /clr
#include <vcclr.h>
using namespace System;

class CppClass {
public:
   gcroot<String^> str;   // can use str as if it were String^
   CppClass() {}
};

int main() {
   CppClass c;
   c.str = gcnew String("hello");
   Console::WriteLine( c.str );   // no cast required
}

// mcpp_gcroot_2.cpp
// compile with: /clr
// compile with: /clr
#include <vcclr.h>
using namespace System;

struct CppClass {
   gcroot<String ^> * str;
   CppClass() : str(new gcroot<String ^>) {}

   ~CppClass() { delete str; }

};

int main() {
   CppClass c;
   *c.str = gcnew String("hello");
   Console::WriteLine( *c.str );
}

// mcpp_gcroot_3.cpp
// compile with: /clr
#include < vcclr.h >
using namespace System;

public value struct V {
   String^ str;
};

class Native {
public:
   gcroot< V^ > v_handle;
};

int main() {
   Native native;
   V v;
   native.v_handle = v;
   native.v_handle->str = "Hello";
   Console::WriteLine("String in V: {0}", native.v_handle->str);
}

Você vai descobrir mais aqui

E aqui está o seu código alterado para usar o Gcroot:

void f(cli::array<gcroot<PointF ^>> points){
     gcroot<PointF ^> a = points[0];
     // and so on... }
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top