![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Почему Incompatible types: 'Integer' and 'Pointer'? [D5]
De © (2005-12-09 12:37:00)Привет, All!
юзаю opengl конкретно функцию gluBuild2DMipmaps
вызваю её в своей функции последним параметром передаю "data: Pointer" пришедшее как параметр моей функции
прикомпиляции упорно кричит
Incompatible types: 'Integer' and 'Pointer'
почему?
объявление функции в opengl.pas:
function gluBuild2DMipmaps (target: GLenum; components, width: GLint;
format, atype: GLenum; data: Pointer): Integer; stdcall;
её вызов в мой функции:
function glTex_Create(c, b: integer; Width, Height: integer; Clamp: boolean; Data: Pointer): TTexture;
...
gluBuild2DMipmaps(GL_TEXTURE_2D, c, Width, Height, b, GL_UNSIGNED_BYTE, Data);
msguns (2005-12-09 14:05:00) [1]>Плохиш © (09.12.05 13:58) [18]
>А Ctrl+Shift+Space не легче нажать
Действительно ;))
evvcom (2005-12-09 14:02:00) [2]Угу, легче. С чем-то у меня такая комбинация в памяти уже связана. Ладно, в нужном приложении пальцы сами вспомнят. :)
Спасибо.
msguns (2005-12-09 13:59:00) [3]А если нажать Ctrl+LeftButton на имени функции в строке обращения, то тоже зависнет ?
Плохиш (2005-12-09 13:58:00) [4]
> evvcom © (09.12.05 13:51) [16]
А Ctrl+Shift+Space не легче нажать
De (2005-12-09 13:57:00) [5]у нас большая своя бибилотека, поэтому хинты отрубаю иначе гарантированый зависон при неосторожных манипуляциях, это и подвело
evvcom (2005-12-09 13:51:00) [6]
> ошибки первым делом число параметров ввызываемой функции
> считаете?
Я обычно после имени функции открывающую скобку ставлю и Дельфя хинт показывает, что за параметр и какого типа она теперь ожидает. Если хинт погас после ввода нескольких параметров, опять скобку открываю, потом удаляю, но хинт остается. :)
De (2005-12-09 13:37:00) [7]вот и я проверил, но предварительно проконсультировался с АТЦАМИ
msguns (2005-12-09 13:32:00) [8]>De (09.12.05 13:25) [13]
>вы всегда при появлении ошибки первым делом число параметров ввызываемой функции считаете?
При появлении подобной ошибки ВСЕГДА
De (2005-12-09 13:25:00) [9]>msguns
да не до того было, и так работы выше крыши, тем более что уж в подобных местах багу найти меньше всего ожидаешь или вы всегда при появлении ошибки первым делом число параметров ввызываемой функции считаете?
msguns (2005-12-09 13:22:00) [10]А подсчитать к-во параметров ожидаемых и передаваемых не приходило в голову ?
De (2005-12-09 13:20:00) [11]все народ у меня в opengl.pas бага там вместо 7 параметров только 6 описаны
Defunct (2005-12-09 12:57:00) [12]De (09.12.05 12:51) [7]
imho с data у вас возможно все в порядке, а ошибка вероятно где-то здесь:
width: GLint; format, atype: GLenum;
gluBuild2DMipmaps(GL_TEXTURE_2D, c, Width, Height, b, GL_UNSIGNED_BYTE, Data);
в выделенных параметрах, что-то лишнее:
исходя из данного вами описания функции:
> function gluBuild2DMipmaps (target: GLenum; components, width: GLint;
format, atype: GLenum; data: Pointer): Integer; stdcall;
Reindeer Moss Eater (2005-12-09 12:56:00) [13]С чего ты вообще решил, что виноват шестой параметр?
Reindeer Moss Eater (2005-12-09 12:53:00) [14]на основе этого происходит
На основе этого ничего кроме ошибки не происходит
De (2005-12-09 12:51:00) [15]>Reindeer Moss Eater
и что? на основе этого происходит изменение типа 6 параметра? почему?
Defunct (2005-12-09 12:51:00) [16]De (09.12.05 12:42) [2]
и с учетом Reindeer Moss Eater © (09.12.05 12:47) [4]
Почитай описание функции, на месте Data поидее должен быть указатель на некую структуру данных, необходимую для mipmap'a.
De (2005-12-09 12:50:00) [17]> Defunct
да но ведь, на входе gluBuild2DMipmaps требует Pointer, и ему передается Pointer, исходя из сообщения и ваших пояснений делаю вывод что произошло конверитрование Pointer в Integer но почему, параметр Data: Pointer я вным образом негде не изменялся
Reindeer Moss Eater (2005-12-09 12:47:00) [18]Ты передешь в gluBuild2DMipmaps передаешь параметры.
2,3,4 и 5 параметры одного и того же типа: integer
А функция ждет 2-й и 3-й параметры одного типа, а 4-й и 5-й - другого типа.
Defunct (2005-12-09 12:45:00) [19]Pointer это 32х разрядный указатель на область памяти.
Integer - 32х разрядное целое число с диапазоном от -2млрд до +2млрд.
Фактически эти типы несовместимы, о чем вам и сообщает компилятор в сообщении Incompatible Types, но если Вы уверены в обратном, тогда из-за того, что объем этих типов одинаковый (физически переменные типа Integer и Pointer занимают 4 байта) можно применить TypeCast:
Integer( Data ), где Data переменная типа Pointer
Pointer( Data ), где Data переменная типа Integer.
De (2005-12-09 12:42:00) [20]так а что не так, как исправить
вопрос не зря задан в форуме "Начинающим"