原生C++;到C# 我想在C++中使用C++类。 < C++ >我的.h文件是这样的: struct XMFloat3 { public: float x; float y; float z; XMFloat3(){} XMFloat3(float _x, float _y,float _z) { x = _x; y = _y; z = _z; } }; class Car { public: XMFloat3 m_position; char* m_name; int m_model; double m_price; void setPosition(XMFloat3); void setName(char* ); void setModel(int); void setPrice(double); XMFloat3 getPosition() { return m_position; } char* getName() { return m_name; } int getModel() { return m_model; } double getPrice() { return m_price; } void SetInformation(XMFloat3 position,char* name, int model,double price); ~Car(void); static Car* getInstance(); private: Car(void){ } Car(XMFloat3 position,char* name,int model,double price){ } static Car* instance; };
我使用包装类定义创建clr\library项目,如下所示:原生C++;到C# 我想在C++中使用C++类。 < C++ >我的.h文件是这样的: struct XMFloat3 { public: float x; float y; float z; XMFloat3(){} XMFloat3(float _x, float _y,float _z) { x = _x; y = _y; z = _z; } }; class Car { public: XMFloat3 m_position; char* m_name; int m_model; double m_price; void setPosition(XMFloat3); void setName(char* ); void setModel(int); void setPrice(double); XMFloat3 getPosition() { return m_position; } char* getName() { return m_name; } int getModel() { return m_model; } double getPrice() { return m_price; } void SetInformation(XMFloat3 position,char* name, int model,double price); ~Car(void); static Car* getInstance(); private: Car(void){ } Car(XMFloat3 position,char* name,int model,double price){ } static Car* instance; };,c#,c++,C#,C++,我使用包装类定义创建clr\library项目,如下所示: public ref class WrapperClass { public: WrapperClass(); void setInformation(XMFloat3 position,String^ name,int model,double price); void setPosition(XMFloat3); void setPosition(float x,float y,float z)
public ref class WrapperClass
{
public:
WrapperClass();
void setInformation(XMFloat3 position,String^ name,int model,double price);
void setPosition(XMFloat3);
void setPosition(float x,float y,float z);
XMFloat3 getPosition() { return obj->getPosition(); }
void setName(String^ name);
String^ getName() { return gcnew String(obj->getName()); }
void setModel(int);
int getModel() { return obj->getModel(); }
void setPrice(double);
double getPrice() { return obj->getPrice(); }
float getX() { return obj->getX(); }
~WrapperClass();
private:
Car *obj;
};
徖
但是当我在C#中使用这个包装类函数getPosition()时,在C#getPosition()声明中如下所示:
XMFloat3* getPosition(XMFloat *);
这不适合我使用,请告诉我我是否有任何错误,或者建议如何在这种情况下使用用户定义的数据类型
第二个问题是如何在C#中访问或使用用户定义的数据类型。e、 g如果我想从C传递XMFloat3数据#怎么可能??(我在C#.cs文件中创建了XMFloat3结构,并尝试使用它,但它的给定类型匹配错误
在C#中,包装类的setPosition声明如下:
公共无效设置位置(xmt);
错误是CSharp.XMFloat3与WrapperDll.XMFloat3的类型不匹配
请告诉我如何在C#中使用上述课程
谢谢一个问题是,当您指向托管GC对象时,您不能使用*(指针)。您需要使用指针的GC变量..如果我将XMFloat3 getPosition(){return obj->getPosition();}更改为XMFloat3*getPosition(){return obj->getPosition()}现在c#getPosition声明类似于:public XMFloat3*getPosition;但由于存在保护级别,我仍然无法获取C#中的内部(x,y,z)值。错误:错误1'CreateClassLibraryForDllUSE.WrapperClass.getPosition()由于其保护级别D:\CaldPcPytoToL.CL\\cSARPpILdLL\FLUM1. C.57 xMFLUAT3是一个本地结构,不能从C++中使用。您必须为它编写一个公共的代码>结构值> /COD>包装器。我用X、Y、Z数据成员创建值类型结构XMFLATAT3X,现在我如何使用它来设置并获得C++ XMFLAT3 x、y、z数据成员。----------------------------------------------------------------------------------------我没有创建这样的结构,因为当我们在包装文件(CreateClassLibraryFordelluse)中包含Cpp_Dll.h时,XMFloat3在该文件中是可访问的,我认为它直接对我起作用。请也讨论一下这种情况下它在后端是如何工作的。谢谢