2015-06-19 6 views
5

Я пытаюсь установить погоду, я могу использовать rebol для нескольких задач программирования. Я написал небольшую программу, которая загружает внешнюю библиотеку и вызывает функцию, которая возвращает указатели в некоторых аргументах. Когда я запускаю программу, он выдает rebol.exe. Я надеюсь, что кто-то может мне помочь. Функция длл выглядит следующим образом:Указатели вернулись из функции dll при вызове из rebol

void xxx swe_utc_time_zone(int32 iyear, int32 imonth, int32 iday, 
int32 ihour, int32 imin, double dsec, double dtimezone, 
int32 *iyear_utc, int32 *imonth_utc, int32 *iday_utc, 
int32 *ihour_utc, int32 *imin_utc, double *dsec_utc) 

и это моя маленькая тестовая программа:

rebol [] 
astrology-lib: load/library %/c/sweph/bin/swedll32.dll 
swe-utc-time-zone: make routine! [ 
    iyear [integer!] 
    imonth [integer!] 
    iday [integer!] 
    ihour [integer!] 
    iminute [integer!] 
    dsec [decimal!] 
    dtimezone [decimal!] 
    iyear-utc [char*] 
    imonth-utc [char*] 
    iday-utc [char*] 
    ihour-utc [char*] 
    iminute-utc [char*] 
    dsec-utc [char*] 
] astrology-lib "[email protected]" 
swe-utc-time-zone 2015 6 20 0 19 0 -4.5 none none none none none none 

Программа падает на последней строке, где я пытаюсь вызвать функцию. Сообщение об ошибке: «REBOL/View system перестала работать»

+0

Есть еще несколько примеров звонка в библиотеки здесь http://www.re-bol.com/rebol.html#section-9.8 – johnk

+0

@johnk Там нет ничего, в котором используются параметры указателя, и я чувствую, что это ошибка. – user1897830

+0

Звезды предсказывают более интересную удачу с реализацией FFI ([интерфейс внешней функции] (https://en.wikipedia.org/wiki/Foreign_function_interface)) для ROUTINE! то есть в вилке Atronix Rebol3. * (Также rebol3 является открытым исходным кодом и имеет более вероятное будущее.) * Я мало знаю об этом, но [тестовый файл здесь] (https://github.com/zsx/r3/blob/atronix/make /tests/test-ffi.r), и вы можете спросить их, есть ли у вас проблемы. [Страница загрузки] (http://atronixengineering.com/downloads.html) См. Также: [Красный] (http://stackoverflow.com/questions/30087380/) – HostileFork

ответ

2

Вы должны предоставить память как минимум того же размера, что и указатель, который вы хотите получить от своего вызова.

Так вместо того, чтобы не ни вы должны использовать слова инициализируются с чем-то вдоль линии

iyear-utc: make struct! [ 
    point [integer!] 
] none 

Может быть эти ссылки даст вам дополнительную помощь adress, conversions, more conversions