加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

这可能吗?在C#中调用托管c结构构造函数

发布时间:2020-12-15 17:26:30 所属栏目:百科 来源:网络整理
导读:我有一个带有构造函数的托管c类/结构,它接受输入.在C#中,我只能“看到”默认构造函数.有没有办法调用其他构造函数,而无需离开托管代码?谢谢. 编辑:事实上,它的所有功能都不可见. C : public class Vector4{private: Vector4_CPP test ; Vector4(Vector4_C
我有一个带有构造函数的托管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);

解决方法

第一个问题是您的类声明是针对非托管C对象的.

如果需要托管C/C++LI对象,则需要以下其中一项:

public value struct Vector4

要么

public ref class Vector4

此外,任何包含本机类型的C/C++LI函数签名都不会对C#可见.因此,任何参数或返回值都必须是C/C++LI托管类型或.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,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,w ) ;
    } 
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读