调用在J中采用嵌套结构(通过引用)的C函数
我正在学习如何调用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中,我创建了一个包含以
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
)
mema
、memf
、memr
和memw
?如果是,怎么做struct
s的示例。您能提供指向J代码的指针吗?在J代码中,使用共享库从J调用包含嵌套的struct
s的struct
s地址的C函数报酬:对回答(最)满意的人给予至少200分的奖励。我没有见过经常出现能回答你问题的人。也许可以去J编程论坛,然后发布你的问题。当你得到你想要的答案时,为了stackoverflow参与者的利益,你可以回到这里。是论坛的链接,我认为编程很可能是适合你问题的论坛。