2015-06-19 67 views
5

我试图确定天气我可以使用rebol进行一些编程任务。我编写了一个加载外部库的小程序,并调用一个函数,该函数返回一些参数中的指针。当我运行该程序时,它会崩溃rebol.exe。我希望有人能帮助我。 DLL函数如下:当从rebol调用时,从dll函数返回的指针

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 /查看系统已停止工作”

+0

这里有几个例子呼吁图书馆在这里http://www.re-bol.com/rebol.html#section-9.8 – johnk

+0

@johnk没有什么使用指针参数,我觉得这是错误的地方。 – user1897830

+0

对于ROUTINE,星星预测FFI实现([外部函数接口](https://en.wikipedia.org/wiki/Foreign_function_interface))会带来更多有趣的运气!那就是在Atronix的Rebol3分支中。 *(另外rebol3是开源的,未来可能性更大。)*我不太了解它,但[此处测试文件](https://github.com/zsx/r3/blob/atronix/make /tests/test-ffi.r),你可能会问他们是否有问题。 [下载页面](http://atronixengineering.com/downloads.html)另请参阅:[Red](http://stackoverflow.com/questions/30087380/) – HostileFork

回答

2

您必须提供至少与您希望从呼叫中获得的指针相同大小的内存。

所以不是没有你应该使用一些初始化的话沿着

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

也许这些链接线会给你更多的帮助adressconversionsmore conversions