4

原型:

myFunction( ULONG , *ULONG ),PASCAL

变量:

myArray ULONG, DIM(30)
myStuff ULONG

代码:

...
myFunction(myStuff, myArray)
...

错误:

没有可用的匹配原型- C:...

原型本身有问题还是我传递了错误的变量?

有关更多细节,有问题的实际函数是 glSelectBuffer( GLsizei , *GLuint ),PASCAL

其中 GLSizei 等同于 ULONG,GLuint 等同于 ULONG。

等式是否可能导致系统崩溃?我不这么认为,因为到目前为止还没有其他问题可以使其他功能与 Clarion 兼容,但尤其是这个问题非常麻烦。该函数正在寻找一个用户定义大小的数组以用作保存选择数据的缓冲区。我认为创建一个缓冲区很简单(参见:myArray ULONG, DIM(30)),然后只传递变量,因为它应该传递数组的地址,但到目前为止,这只导致上面列出的编译错误.

任何帮助将不胜感激。

4

3 回答 3

3

正确的做法是将 [] 放在原型中。例如,下面的程序编译得很好。

  PROGRAM


myArray ULONG, DIM(30)
myStuff ULONG

  MAP  
   myFunction( ULONG , *ULONG[] ),PASCAL

  END

  CODE
    myFunction(myStuff,myArray)

myFunction  Procedure(a,b)
  code
于 2011-04-02T14:41:55.187 回答
2

等式:

GLsizei             EQUATE(ULONG)
GLuint              EQUATE(ULONG)

原型:

glSelectBuffer( GLsizei , *GLuint ),PASCAL

数据:

mySelectionBuffer &STRING
myBufferPointer   &ULONG
curSelection      ULONG

在里面:

mySelectionBuffer &= NEW(STRING(30)) 
myBufferPointer   &= ADDRESS(mySelectionBuffer)

利用:

![glSelectBuffer(Size of Buffer Array, Pointer to Buffer)
glSelectBuffer(30, myBufferPointer)  

然后捕获数据:

...
LOOP i# = 1 TO numHits ![result of glRenderMode(GL_RENDER)]
            curSelection = ADDRESS(mySelectionBuffer) + (SIZE(curSelection) * i#)
.
![Process selection data as needed]
...  

关闭:

DISPOSE(mySelectionBuffer)  

有些人可能会争辩说这不是处理该问题的最佳方式,但是归根结底,这是我遇到的唯一解决方案,它不仅可以编译,而且在将数据传回后也不会随后在 OpenGL 端崩溃给它。我宁愿避免使用内存来完成我手头的任务,但似乎在处理其他 API 中的函数时,这简直是不可避免的......

于 2011-04-01T15:19:20.253 回答
1

当一切都失败时,您可以将参数作为原型LONG并将其传递ADDRESS给变量,例如:

原型:

myFunction( ULONG , LONG ),PASCAL

代码:

...
myFunction(myStuff, ADDRESS(myArray))
...
于 2011-04-01T01:22:33.880 回答