我想知道如何编组我用C#语言在C ++中创建的2个类。 (一个教程链接将是完美的,我试图为自己谷歌这个,但我的英语知识不是那么先进,寻找正确的东西。我是从C ++到C#编组的新手)
基本上我拥有的是这样的东西:
C ++
EXPORT_API CarClass* DLL_AddCar();
EXPORT_API CarWheel* DLL_AddWheel();
EXPORT_API void DLL_GiveWheelToCar(CarClass* car,CarWheel* wheel);
C#
public class Car
{
#region Members
private IntPtr nativeCarObject;
#endregion Members
public Car()
{
this.nativeCarObject = Sim.DLL_AddCar();
}
// ---> this part is not working
//#region Wrapper methods
//public void GiveWheel(Wheel myWheel){Sim.DLL_GiveWheelToCar(this.nativeCarObject,myWheel);}
//#endregion Wrapper methods
}
public class Wheel
{
#region Members
private IntPtr nativeCarObject;
#endregion Members
public Wheel()
{
this.nativeCarObject = Sim.DLL_AddWheel();
}
}
internal class Sim
{
public const string pluginName = "MyDLL";
#region PInvokes
[DllImport(pluginName)] public static extern IntPtr DLL_AddCar();
[DllImport(pluginName)] public static extern IntPtr DLL_AddWheel();
[DllImport(pluginName)] public static extern void DLL_GiveWheelToCar(IntPtr car,IntPtr wheel);
#endregion PInvokes
}
现在我的问题是我在哪里使用“DLL_GiveWheelToCar”? 我尝试的方法被注释掉了,因为它没有用,是逻辑错误还是我应该改变我编组的方式?
感谢您的建议。
答案 0 :(得分:0)
public void GiveWheel(Wheel myWheel){
Sim.DLL_GiveWheelToCar(this.nativeCarObject, myWheel);
}
在这里,您将myWheel
类型为Wheel
的{{1}}传递给期望IntPtr
的函数。您需要传递当前(错误)名为Wheel
的{{1}}类的私有字段。
其他要点:
nativeCarObject
nativeCarObject
成员应重命名为Wheel
。nativeWheelObject
调用约定。您应该在p / invoke声明中指定它。代码可能看起来像这样:
cdecl
此代码仍在泄露这些对象。我会让你解决这个问题。