我正在学习如何在J中调用共享库。我已经阅读了DLLs and Memory Management和chapter 21的J for C Programmers上的简洁教程。
在C语言中,我定义了以下struct
:
typedef struct {
int type;
double rate;
double quantity;
} Order;
仍然使用C,然后定义函数getType
,getRate
和getQuant
,这些函数采用类型struct
的{{1}}并返回其{{1} },Order
和type
。最后,我确实建立了一个共享库(共享对象)rate
。
在J中,我创建了一个包含以下内容的quantity
文件:
test.so
在ijs
中测试这些简单的测试功能:
DLL =: jpath '/Users/rodrigo/Desktop/test.so'
cd=: 15!:0
NB. int getType(Order order)
getType =: 3 : 0
cmd =. DLL,' getType i i d d'
1 pick cmd cd y
)
NB. double getRate(Order order)
getRate =: 3 : 0
cmd =. DLL,' getRate d i d d'
2 pick cmd cd y
)
NB. double getQuant(Order order)
getQuant =: 3 : 0
cmd =. DLL,' getQuant d i d d'
3 pick cmd cd y
)
到目前为止,太好了。但是,在C语言中,我还定义了以下jqt
,其中包含 order1 =: 1; 2.2; 3.3
order2 =: 4; 5.5; 6.6
(getType order1); (getRate order1); (getQuant order1)
┌─┬───┬───┐
│1│2.2│3.3│
└─┴───┴───┘
(getType order2); (getRate order2); (getQuant order2)
┌─┬───┬───┐
│4│5.5│6.6│
└─┴───┴───┘
s类型数组的成员:
struct
在C语言中,我定义了一个函数,该函数采用字符串并通过引用传递类型为Order
的{{1}}:
typedef struct {
long number;
Order buys[10];
} Block;
我的问题如下:
如何在J中调用此解析函数?我应该使用什么描述符?
我必须使用内存管理,即函数struct
,Block
,int parser(const char *str, Block *blck);
和mema
吗?如果是这样,怎么办?
我阅读的教程没有包含memf
的示例。您能否提供一个指向J代码的指针,在J代码中使用共享库从J调用包含嵌套memr
的{{1}} s地址的C函数?
补偿:对(满意)所有满意回答的人至少悬赏200分。