Прототип:
myFunction( ULONG , *ULONG ),PASCAL
Переменные:
myArray ULONG, DIM(30)
myStuff ULONG
< EM> Код:
...
myFunction(myStuff, myArray)
...
< EM> < STRONG> Ошибка :
Нет подходящего прототипа - C: ...
Что-то не так с самим прототипом или я неправильно передаю переменную?
Для уточнения фактической функции, о которой идет речь, является glSelectBuffer (GLsizei, * GLuint), PASCAL.
Где GLSizei приравнивается к ULONG, а GLuint приравнивается к ULONG.
Возможно ли, что равные вызывают сбой в системе? Я бы так не подумал, потому что до сих пор не было других проблем с адаптацией других функций для совместимости с Clarion, но эта, в частности, была чрезвычайно проблемной. Функция ищет массив определенного пользователем размера для использования в качестве буфера для хранения данных выбора. Я думал, что будет достаточно просто создать буфер (см .: myArray ULONG, DIM (30)), а затем просто передать переменную, поскольку она должна передавать адрес массива, но пока это привело только к ошибке компиляции, указанной выше .
Любая помощь будет принята с благодарностью.
3 ответа
Равно:
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 это просто неизбежно ...
Правильный подход - просто поместить [] в прототип. Например, следующая программа компилируется нормально.
PROGRAM
myArray ULONG, DIM(30)
myStuff ULONG
MAP
myFunction( ULONG , *ULONG[] ),PASCAL
END
CODE
myFunction(myStuff,myArray)
myFunction Procedure(a,b)
code
Когда что-то не удается, вы можете создать прототип параметра как LONG
и передать ему ADDRESS
переменной, например:
Прототип:
myFunction( ULONG , LONG ),PASCAL
< EM> Код:
...
myFunction(myStuff, ADDRESS(myArray))
...
Похожие вопросы
Новые вопросы
opengl
OpenGL (Open Graphics Library) - это графический стандарт и API, который не зависит от платформы и доступен для настольных компьютеров, рабочих станций и мобильных устройств. Он предназначен для обеспечения аппаратно-ускоренного рендеринга и, следовательно, значительно повышает производительность по сравнению с традиционным программным рендерингом. OpenGL используется для таких приложений, как программное обеспечение САПР и компьютерные игры. Стандарт OpenGL, как и OpenGL ES, контролируется группой Khronos.