我有一个使用C#和C的程序。C是用来做低级的事情,如渲染。在C#中,我正在做一个Input类。它使用GLFW来获取鼠标位置:
extern "C" __declspec(dllexport) Vector2* GetCursorPos()
{
double xpos, ypos;
glfwGetCursorPos(Window, &xpos, &ypos);
Vector2* pos = new Vector2{ (float)xpos, (float)ypos };
return pos;
}
下面是Vector2结构:
struct Vector2
{
float X;
float Y;
};
在Input类中:
[DllImport("Internal.dll", CallingConvention = CallingConvention.Cdecl)]
internal static extern unsafe Vector2* GetCursorPos();
public static unsafe (float x, float y) GetMousePosition()
{
Vector2* pos = GetCursorPos();
return (pos->X, pos->Y);
}
我的问题是,我应该删除这个Vector2*
吗?(以及在哪里删除)还是由于C#中的垃圾收集而不需要它?
1条答案
按热度按时间dxpyg8gm1#
如果使用该结构,则必须通过在c端创建另一个函数(如
FreeCursorPos
)来删除它或者,您可以在参数中返回x和y位置,如下所示:
在c中:
这样做的好处不仅是不需要新建和删除,而且不再需要将c#标记为
unsafe