在J中调用采用嵌套结构的C函数(通过引用)

时间:2018-08-13 00:46:13

标签: c struct shared-libraries pass-by-reference j

我正在学习如何在J中调用共享库。我已经阅读了DLLs and Memory Managementchapter 21J for C Programmers上的简洁教程。

在C语言中,我定义了以下struct

typedef struct {
    int    type;
    double rate;
    double quantity;
} Order;

仍然使用C,然后定义函数getTypegetRategetQuant,这些函数采用类型struct的{​​{1}}并返回其{{1} },Ordertype。最后,我确实建立了一个共享库(共享对象)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;

我的问题如下:

  1. 如何在J中调用此解析函数?我应该使用什么描述符?

  2. 我必须使用内存管理,即函数structBlockint parser(const char *str, Block *blck); mema吗?如果是这样,怎么办?

  3. 我阅读的教程没有包含memf的示例。您能否提供一个指向J代码的指针,在J代码中使用共享库从J调用包含嵌套memr的{​​{1}} s地址的C函数?


补偿:对(满意)所有满意回答的人至少悬赏200分。

0 个答案:

没有答案