2012-06-03 2 views
3

У меня есть управляемый класс C++ C++ с конструкторами, которые вводят ввод. В C# я могу «видеть» конструктор по умолчанию. Есть ли способ вызвать другие конструкторы, не покидая управляемый код? Благодарю.Возможно ли это? Вызов управляемого конструктора struct 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); 
+1

декларация класса должен быть 'исх класс Vector4'. Не уверен, что это точная проблема здесь, но это проблема. – linuxuser27

+0

Я предпочел бы использовать структуру для Vector4, чем класс. Это, как правило, быстрее. –

+0

Хорошо, это нормально, но это не то, что у вас есть. Я могу быть здесь, но вы используете C++ \ CLI правильно? Если это так, и вы хотите создать структуру, вам нужно объявить тип как 'value struct Vector4' или' ref struct Vector4'. Я не знаком с синтаксисом, который вы используете, если вы хотите использовать класс C++ \ CLI из C# – linuxuser27

ответ

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) ; 
    } 
} 
Смежные вопросы