2016-09-03 7 views
4

C#オブジェクトの配列をマネージC++ DLLに渡しています。C++の配列<T ^>^Tとは何ですか?配列から値を抽出するにはどうすればよいですか?

public class LatLonPointType 
    { 

     public double Lat;  // Latitude. 
     public double Lon;  // Longitude. 
    } 

私はLatLonPointTypesの配列をマネージC++ DLLの関数に渡します。試行錯誤によって、私は、関数の引数を使用してC++関数にこれを渡すことができることを見出したように宣言:

array <LatLonPointType^> ^PolygonPoints 

次のC++のコードでは、^型LatLonPointTypeの要素を抽出します。

LatLonPointType ^a = PolygonPoints[0]; 

私の質問は以下のとおりです。

  1. 私は数年前にC++を使用している、これは参照宣言&に似ているようです。 ^の良い参考文献はありますか?

  2. 上記の例で、(LatLonPointType ^)を(LatLonPointType)値に変換するにはどうすればよいですか?

明確にする:

を私が持っている場合:

LatLonPointType ^a = PolygonPoints[i]; 

にはどうすればいいa.Latとa.Lonになるだろうか?

a-> Latとa-> Lonを使用しますか?

+2

可能性のある重複した[C++/CLIで、帽子の文字が^何をするのでしょうか?] (http://stackoverflow.com/questions/500580/in-c-cli-what-does-the-char-character-do) –

+1

これはC++ではありません。これはMicrosoftのC++標準の破損です。 –

+0

2番はなぜですか?これは、オブジェクトへのポインタを変換するようなものです。もちろん、管理されているポインターを管理されていないポインターに切り替えることができます。 –

答えて

0

this answerによると、この帽子の文字、別名^は、あなたによって必ずしも、ゴミを収集します管理指針を作成します。あなたがnewを使用してネイティブオブジェクトを作成していた場合、それは次のようになります。

Object* obj = new Object(); 

しかし、あなたが管理するポインタを使用した場合、構文は次のとおりに変更します

MObject^ mobj = gcnew MObject(); 

現在、管理されたポインタをオブジェクト自体に変換する方法を見つけることはできませんでしたが、オブジェクトへの管理されていないポインタに変換する場合はthis answerを参照してください。クラスのメンバにアクセスするには

EDIT 、などLon、あなたはこれを行うことができますの

//Get method 
double i = PolygonPoints[n]->Lon; 
//Set method 
PolygonPoints[n]->Lon = number; 
関連する問題