我正在学习D并且在C#方面经验丰富。具体来说,我正在尝试将Derelict3 Binding用于SDL2。我已经能够使一些基本功能正常工作但我已经陷入了如何为特定调用创建数组参数的困境。
该库包含一个电话
SDL_RenderDrawLines(SDL_Renderer*, const(SDL_Point)*, int) //Derelict3 Binding
我无法正确形成
的论据const(SDL_Point)*
此函数的SDL文档声明此参数是SDL_Point
的数组,但我不清楚如何创建适当的数组以传递给此函数。
以下是我目前所拥有的一个例子:
void DrawShape(SDL_Renderer* renderer)
{
SDL_Point a = { x:10, y:10};
SDL_Point b = { x:500, y:500};
const(SDL_Point[2]) points = [a,b];
Uint8 q = 255;
SDL_SetRenderDrawColor(renderer,q,q,q,q);
SDL_RenderDrawLines(renderer,points,1);
}
并且编译器抱怨我没有在const(SDL_Point)*
中为points
传递正确类型的参数。
Error: function pointer SDL_RenderDrawLines (SDL_Renderer*, const(SDL_Point)*, int)
is not callable using argument types (SDL_Renderer*, const(SDL_Point[2u]), int)
我怀疑这是我的一个根本误解所以任何帮助都会受到赞赏。
答案 0 :(得分:5)
数组不能隐式地转换为D中的指针。相反,每个数组(静态和动态)都有一个内部.ptr
属性,它是指向其第一个元素的指针。
将您的代码更改为:
SDL_RenderDrawLines(renderer,points.ptr,1);
答案 1 :(得分:1)
鉴于调用要求指针和长度,我觉得定义自己的包装器更安全:
SDL_RenderDrawLines(SDL_Renderer* rend, const SDL_Point[] points){
SDL_RenderDrawLines(rend,points.ptr,points.length);
}
(为什么它没有定义我不知道,额外函数调用的任何性能影响只有-inline
远离被解析)