【发布时间】:2018-07-19 18:43:15
【问题描述】:
我尝试在 Swift 4 项目中使用 Freeglut 库。当
void glutInit(int *argcp, char **argv);
函数转移到 Swift,它的声明是
func glutInit(_ pargc: UnsafeMutablePointer<Int32>!, _ argv: UnsafeMutablePointer<UnsafeMutablePointer<Int8>?>!)
因为我不需要命令行中的真正参数,所以我想组成这两个参数。我试图在 Bridging-Header.h 文件中定义**argv
#include <OpenGL/gl.h>
#include <GL/glut.h>
char ** argv[1] = {"t"};
并在 main.swift 中使用它们
func main() {
var argcp: Int32 = 1
glutInit(&argcp, argv!) // EXC_BAD_ACCESS
glutInitDisplayMode(UInt32(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH));
glutCreateWindow("my project")
glutDisplayFunc(display)
initOpenGL()
glutMainLoop()
但是我得到Thread 1: EXC_BAD_ACCESS (code=1, address=0x74) 与 glutInit()。
如何正确初始化 glut?我怎样才能获得UnsafeMutablePointer<UnsafeMutablePointer<Int8>?>! 以便它工作?
【问题讨论】:
-
我不是 Swift 的人,但它确实看起来应该是 "char * argv[1] = {"t"};"而不是 "char ** argv[1] = {"t"};" (注意单星而不是双星)。不是答案,因为我只是在猜测......
-
当我删除一个
*时,它甚至不会编译,因为参数包含在两个 UnsafeMutablePointers 中,我猜这两个*表示
标签: swift pointers opengl glut freeglut