OberonCore https://forum.oberoncore.ru/ |
|
BB dll - MSVC exe передача массивов https://forum.oberoncore.ru/viewtopic.php?f=2&t=283 |
Страница 1 из 1 |
Автор: | Kubanych [ Вторник, 01 Август, 2006 07:53 ] |
Заголовок сообщения: | BB dll - MSVC exe передача массивов |
Здравствуйте. Вот процедура на BB ([untagged] после ARRAY компилятор не принимает) PROCEDURE test* ( lenMomentNodes:INTEGER; VAR momentNodes:ARRAY OF INTEGER ):INTEGER; VAR i:INTEGER; BEGIN FOR i :=0 TO lenMomentNodes-1 DO momentNodes[i]:=i*2; END; RETURN 2 END test; И вот вызывающая на MSVC 7 ее программа extern "C" int __declspec(dllimport) test ( int lenMomentNodes, int * momentNodes ); int _tmain(int argc, _TCHAR* argv[]) { int i; int a[10]; printf("%d \n\n",test(10,a)); for(i=0;i<10;i++) { printf(" %d \n",a[i]); } return 0; } При обращении к элементам массива программа вылетает. Этот вопрос уже поднимался для Дельфи, но из текста форума не совсем ясно решение. Как правильно оформить передачу параметра - массива. Заранее благодарю. С уважением, Кубаныч. |
Автор: | Kubanych [ Вторник, 01 Август, 2006 12:59 ] |
Заголовок сообщения: | |
Если импортировать SYSTEM, то [untagged] ставится и программа срабатывает, но возникаем другая проблема элемент массива с индексом 0 принимает не то значение, которое установили в процедуре, а результат, возвращаемый процедурой через RETURN . Как правильно поступить? |
Автор: | Илья Ермаков [ Вторник, 01 Август, 2006 13:43 ] |
Заголовок сообщения: | |
Правильный заголовок процедуры: Код: PROCEDURE Test* (lenMomentNodes: INTEGER;
VAR momentNodes: ARRAY [untagged] OF INTEGER): INTEGER; Однако надо учитывать, что процедуры ББ используют соглашения вызова STDCALL. Поэтому в заголовке на С нужно поставить модификатор __stdcall: extern "C" __stdcall... Либо наоборот, поставить в заголовке ББ модификатор [ccall]: PROCEDURE [ccall] Test* ... |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |