我在网上找到了许多参考文献(包括一些关于stackoverflow的参考文献),这些参考文献都用于C
库的JNA,但是我在JNA文档中找不到任何内容表明这是可能的。特别是似乎没有任何包装C
类的方法。
我需要本机访问权限才能使用RTAudio,但是RTAudio的所有功能都是RTAudio类的成员函数。因此,仅需确认,JNA是否行不通?
这个问题的意思是询问如何使用JNA调用C ++实例方法,这是可能的,但是您将不得不做一些工作。特别是,您需要编写一个包装器,该包装器包含extern "C"
您实际需要调用的所有函数。
对于任何任意type* function()
定义,您都可以使用JNA映射方法来返回a
com.sun.jna.Pointer
,但是您将无法从JNA调用C ++对象上的方法。
一个简单的解决方法是编写一个C接口库,该库仅为您调用对象上的方法…因此,如果您有一些成员函数foo()
,则可以从C ++代码中导出C方法:
extern "C" void bar(type* var){
var->foo();
}
显然,这将为您增加一些工作…但是我怀疑切换到JNI的开销大致相同。
JNA只关心方法在DLL中的导出方式-并且必须 没有 C ++修饰(因此extern "C"
),因此您可以在任何此类方法中执行所需的任何操作,而无需暴露调用的方法。
在上面的人为设计示例中,这意味着foo()
,只要在DLL中定义它,实际上甚至不必公开它。由于它是C
++函数,因此JNA无法直接调用它,但是可以在JNA可以调用的函数中调用它,这就是我提出的解决方案起作用的原因。
因此,是的,您可以将对所有成员函数(创建,操作,销毁)的调用完全封装在一个函数中,而JNA则不在乎。
在 Emscripten 中使用 Embind 和 WebIDL Binder 都可以将 C 对象导出至 JavaScript,但笔者在实际工程中并没有使用这两种方法,一方面是因为这些方法是侵入式的,另一方面更重要的是,笔者对于 是否应该使用C类作为库接口 本身持保留态度——设计出一个糟糕的 C 接口的可能性远高于设计出一个糟糕的 C 接口——当然这并不意味着反对使用 C,事实上 C 是笔者日常使
我需要以这种格式发布一个对象: 我试过: 但是服务器返回了一个错误的请求。我认为数据的格式无效。 如何更改代码以将数据转换为正确的格式? 谢谢你!
问题内容: 假设我的对象布局定义为: …以及我的类型定义: 如何在C扩展中的某个地方创建新实例? 问题答案: 调用 PyObject_New() ,然后调用PyObject_Init ()。 编辑: 最好的方法是调用类对象,就像在Python本身一样:
本文向大家介绍C#使用FileStream对象读写文件,包括了C#使用FileStream对象读写文件的使用技巧和注意事项,需要的朋友参考一下 在项目开发中经常会涉及到对文件的读写,c# 提供了很多种方式来对文件进行读写操作,今天来说说FileStream 对象。 FileStream表示在磁盘或网络路径上指向文件的流。一般操作文件都习惯使用StreamReader 和 StreamWriter,
问题内容: 显然,有许多问题看起来像一个简单的正则表达式表达式就可以解决,但是事实证明用正则表达式 很难 解决。 那么, 不是正则表达式专家的 人怎么知道他/她是否应该学习正则表达式来解决给定的问题呢? 这似乎很好地总结了这一点: 有些人在遇到问题时会想到“我知道,我会使用 正则表达式。” 现在他们有两个问题… (我刚刚更改了问题的标题以使其更加具体,因为C#中Regex的一些问题已在Perl和J
本文向大家介绍C#使用dynamic类型访问JObject对象,包括了C#使用dynamic类型访问JObject对象的使用技巧和注意事项,需要的朋友参考一下 dynamic是C#里面的动态类型,可在未知类型的情况访问对应的属性,非常灵活和方便。 使用Json.Net可以把一个Json字符串转换成一个JObject对象,如果有已知强类型,如果有已知对应的强类型,可以直接转成对应的类型。但如果没有,