运行Crystal程序时,程序已收到并且未处理信号IOT(6)

黑人

我有程序,它链接到C库“ nats”

@[Link("nats")]
lib LibNats
  fun natsConnection_ConnectTo(connection: UInt64*, connstr: UInt8*)
  fun natsConnection_PublishString(connection: UInt64*, key: UInt8*, value: UInt8*)
  fun natsConnection_Subscribe(sub: UInt64*, connection: UInt64*, key: UInt8*, cb: (UInt64*, UInt64*, UInt64*) -> Void)
end

connection = uninitialized UInt64
s = uninitialized UInt64

LibNats.natsConnection_ConnectTo(pointerof(connection), "nats://localhost:4222")
LibNats.natsConnection_Subscribe(pointerof(s), pointerof(connection), "qwe", ->(c, s, m) {
  puts m
})
LibNats.natsConnection_PublishString(pointerof(connection), "qwe", "{}")

运行它之后,我收到错误消息: Program received and didn't handle signal IOT (6)

紫晶

查看包含文件的第一个功能是:

NATS_EXTERN natsStatus
natsConnection_ConnectTo(natsConnection **nc, const char *urls);

看那里的双指针,而在绑定中,您只使用一个指针。

这在C库中很常见:您的数据中有一些结构(natsConnection),并且通常通过引用传递它(因此有一个指针),但是在“构造函数”函数中您要存储该指针的位置收到了该指针的指针,通常由函数本身为其分配内存。

无论如何,解释真的很长,我现在没有时间,但是尝试一下:

@[Link("nats")]
lib LibNats
  type Conn = Void*
  type Sub = Void*

  alias Status = Int32

  fun natsConnection_ConnectTo(connection : Conn*, connstr : UInt8*) : Status
  fun natsConnection_PublishString(connection : Conn, key : UInt8*, value : UInt8*) : Status
  fun natsConnection_Subscribe(sub : Sub*, connection : Conn, key : UInt8*, cb : (UInt64*, UInt64*, UInt64*) -> Void) : Status
end

status = LibNats.natsConnection_ConnectTo(out connection, "nats://localhost:4222")
abort "natsConnection_ConnectTo failed" if status != 0

status = LibNats.natsConnection_Subscribe(out subscription, connection, "qwe", ->(c, s, m) {
  puts m
})
abort "natsConnection_Subscribe failed" if status != 0

status = LibNats.natsConnection_PublishString(connection, "qwe", "{}")
abort "natsConnection_PublishString failed" if status != 0

另请阅读有关out关键字的信息,并确保检查错误。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在 HackerRank 上运行程序时收到 SIGSEV 信号

KVO:已收到消息但未处理

在 Xamarin.Android 中运行程序导致创建按钮处理程序时出现未处理的异常

运行haskell程序时收到<< loop >>消息

使用IBM MobileFirst Platform 7.0关闭应用程序时,如果收到onMessage未处理的推送通知

运行应用程序时线程1信号信号错误?

运行程序时处理停止

运行postDelayed处理程序时冻结AsynchTask

运行处理程序时遇到问题?

使用信号处理程序处理从 fifo 接收到的数据

当段故障发生时未调用信号处理程序时?

程序在运行时抛出未处理的异常 IndexOutOfRange

定义自己的处理程序时是否应该触发默认信号处理程序?

pause()信号处理程序

SIGKILL信号处理程序

errno是信号处理程序

信号处理程序行为

NullReferenceException未处理的修复程序?

如何在执行角度应用程序时解决未处理的错误

当应用程序有后台处理程序时,Flutter 中未收到 FCM 通知

当已经在信号处理程序中时接收到信号会发生什么?

C链表和节点程序,为什么我收到一个未处理的异常?

运行应用程序时失去与“ iPhone 6”的连接

全局未处理的拒绝处理程序

如何避免在覆盖go的默认信号处理程序时出现种族问题?

等待信号处理程序本身内部的信号

从默认致命信号的信号处理程序返回

带线程的信号处理程序

信号处理程序返回哪里?