|  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). | |