Frage

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

Kompilieren Sie Fehler in Zeile 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

Was ist der verwaltete Weg, um eine Referenzvariable zu deklarieren?

War es hilfreich?

Lösung

Wenn Sie nur einen Verweis auf den ersten Punkt im Array deklarieren möchten, müssen Sie a verwenden Verfolgung der Referenz (%):

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

Andere Tipps

Sie müssen die verwenden gcroot Vorlage von vcclr.h Datei:

Dies sind Proben von 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);
}

Sie werden mehr herausfinden hier

Und hier ist Ihr Code geändert, um GCroot zu verwenden:

void f(cli::array<gcroot<PointF ^>> points){
     gcroot<PointF ^> a = points[0];
     // and so on... }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top