4

入力を受け取るコンストラクターを備えたマネージC++クラス/構造体があります。C#では、デフォルトのコンストラクターしか「見る」ことができません。マネージコードを残さずに、他のコンストラクターを呼び出す方法はありますか?ありがとう。

編集:実際、その機能はどれも表示されていません。

C ++:

public class Vector4
{
private:
    Vector4_CPP test ;

    Vector4(Vector4_CPP* value)
    {
        this->test = *value;
    }


public:
    Vector4(Vector4* value)
    {
        test = value->test;
    }
public:
    Vector4(float x, float y, float z, float w)
    {
        test = Vector4_CPP( x, y, z, w ) ;
    }


    Vector4 operator *(Vector4 * b)
    {
        Vector4_CPP r = this->test * &(b->test) ;
        return Vector4( &r ) ;
    }
} ;

C#:

// C# tells me it can't find the constructor.
// Also, none of them are visible in intellisense.
Library.Vector4 a = new Library.Vector4(1, 1, 1, 1);
4

1 に答える 1

2

最初の問題は、クラス宣言がアンマネージC++オブジェクトに対するものであるということです。

マネージC++/ CLIオブジェクトが必要な場合は、次のいずれかが必要です。

public value struct Vector4

また

public ref class Vector4

また、ネイティブ型を含むC ++ / CLI関数シグネチャはC#からは見えません。したがって、パラメータまたは戻り値は、C ++/CLI管理型または.NET型のいずれかである必要があります。オペレーター*の署名がどのように見えるかはわかりませんが、次のように休憩することができます。

public value struct Vector4 
{   
  private:
    Vector4_CPP test;

    Vector4(Vector4_CPP* value)
    {
        this->test = *value;
    }

  public:
    Vector4(Vector4 value)
    {
        test = value.test;
    }

    Vector4(System::Single x, System::Single y, System::Single z, System::Single w)
    {
        test = Vector4_CPP( x, y, z, w ) ;
    } 
}

または:

public ref class Vector4 
{   
  private:
    Vector4_CPP test;

    Vector4(Vector4_CPP* value)
    {
        this->test = *value;
    }

  public:
    Vector4(Vector4^ value)
    {
        test = value->test;
    }

    Vector4(System::Single x, System::Single y, System::Single z, System::Single w)
    {
        test = Vector4_CPP( x, y, z, w ) ;
    } 
}
于 2012-07-11T17:37:52.247 に答える