如何在Clarion中正确传递数组地址?

时间:2011-03-30 21:09:03

标签: opengl clarion

原型:

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))然后只传递变量就好了,因为它应该传递数组的地址但到目前为止这只会导致上面列出的编译错误

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:3)

正确的方法就是将[]放入原型中。 例如,以下程序编译正常。

  PROGRAM


myArray ULONG, DIM(30)
myStuff ULONG

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

  END

  CODE
    myFunction(myStuff,myArray)

myFunction  Procedure(a,b)
  code

答案 1 :(得分: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中的函数时,这根本就是不可避免的......

答案 2 :(得分:1)

当一切都失败时,您可以将参数原型化为LONG并传入变量的ADDRESS,例如:

原型:

myFunction( ULONG , LONG ),PASCAL

代码:

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