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

调用在J中采用嵌套结构(通过引用)的C函数,c,struct,shared-libraries,pass-by-reference,j,C,Struct,Shared Libraries,Pass By Reference,J,我正在学习如何调用J中的共享库。我已经阅读了关于和的简明教程 在C中,我定义了以下struct: typedef struct { int type; double rate; double quantity; } Order; 在C语言中,我定义了函数getType、getRate和getQuant,它们分别采用Order类型的struct并返回其type、rate和quantity。最后,我构建了一个共享库(共享对象)test.so 在J中,我创建了一个包含以

我正在学习如何调用J中的共享库。我已经阅读了关于和的简明教程

在C中,我定义了以下
struct

typedef struct {
    int    type;
    double rate;
    double quantity;
} Order;
在C语言中,我定义了函数
getType
getRate
getQuant
,它们分别采用
Order
类型的
struct
并返回其
type
rate
quantity
。最后,我构建了一个共享库(共享对象)
test.so

在J中,我创建了一个包含以下内容的
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
)
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│
└─┴───┴───┘
到目前为止,一切顺利。但是,在C中,我还定义了以下
struct
,其中包含
Order
s类型的数组成员:

typedef struct {
    long    number;
    Order   buys[10];
} Block;
还是在C中,我定义了一个函数,它接受一个字符串并通过引用传递类型为
Block
struct

int parser(const char *str, Block *blck);
我的问题如下:

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
)
  • 如何在J中调用这个解析函数?我应该使用什么描述符

  • 我必须使用内存管理,即功能
    mema
    memf
    memr
    memw
    ?如果是,怎么做

  • 我阅读的教程中没有带
    struct
    s的示例。您能提供指向J代码的指针吗?在J代码中,使用共享库从J调用包含嵌套的
    struct
    s的
    struct
    s地址的C函数



  • 报酬:对回答(最)满意的人给予至少200分的奖励。

    我没有见过经常出现能回答你问题的人。也许可以去J编程论坛,然后发布你的问题。当你得到你想要的答案时,为了stackoverflow参与者的利益,你可以回到这里。是论坛的链接,我认为编程很可能是适合你问题的论坛。