|
22.11.2006, 19:35 | #1 |
MCTS
|
Аргументы функции
Пожалуйста помогите. Никак не могу понять в чем дело...
Есть функция glClearColor() в библиотеке opengl32.dll , она получает в качестве параметров 4 аргумента типа вещественного числа. Вот мой код: Код: DLLFunction glClearColor = new DLLFunction(opengl32, "glClearColor"); ; glClearColor.returns(ExtTypes::void); glClearColor.arg(ExtTypes::Double, ExtTypes::Double, ExtTypes::Double, ExtTypes::Double); Код: glClearColor.call(1.0, 0.0, 0.0, 1.0); Значение регистра ESP не было сохранено при вызове функции 'glClearColor' в библиотеке DLL 'opengl32.dll'. Причиной может являться вызов функции DLL, которая объявлена с неверным числом аргументов. что можно с этим сделать? |
|
22.11.2006, 22:49 | #2 |
Участник
|
Прототип функции на C выглядит так
X++: WINGDIAPI void APIENTRY glClearColor (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); Тип double опредлен как восьмибайтовый, а float как четырехбайтовый. Что бы сделать правильный вызов этой функции надо параметры передавать как DWord. При этом необходимо переводить вещественное число Axapta в четырехбайтовый тип float (single precision) (т.е. в int). Если интересно, как это делается надо искать здесь IEEE Standard 754 Floating Point Numbers. А в Axapta можно выкрутиться так X++: DLLFunction glClearColor = new DLLFunction(opengl32, "glClearColor"); COMVariant parm1 = new COMVariant(); COMVariant parm2 = new COMVariant(); COMVariant parm3 = new COMVariant(); COMVariant parm4 = new COMVariant(); ; glClearColor.returns(ExtTypes::void); glClearColor.arg(ExtTypes::DWord, ExtTypes::DWord, ExtTypes::DWord, ExtTypes::DWord); parm1.float(1.0); parm2.float(0.0); parm3.float(0.0); parm4.float(1.0); glClearColor.call(parm1.int(), parm2.int(), parm3.int(), parm4.int());
__________________
Axapta v.3.0 sp5 kr2 |
|
|
За это сообщение автора поблагодарили: belugin (9), Dark Light (2). |