标签: language-interoperability

我可以使用oracle berkeley db java edition的c实现(python bsddb)创建的bdb(berkeley db)文件吗?

我有一个berkeley db文件(*.bdb),由C实现(python bsddb模块)创建.是否可以通过Berkeley Db的纯Java实现读取此文件?我尝试使用berkeley db java edition(je)读取它,但不能.je抛出一个例外,说它无法检测到伯克利数据库.berkeley数据库文件在不同的实现中是不可互操作的吗?如果是这样,为什么?

compatibility berkeley-db language-interoperability

4
推荐指数
1
解决办法
1217
查看次数

从C++通过SWIG调用Go回调函数

我正在尝试调用C++函数:

void TestFunc(void(*f)(void)) { f(); }
Run Code Online (Sandbox Code Playgroud)

来自Go Code.

我真的希望它只是将Go函数传递给该函数.我知道我可以将它包装到一个类中,并使用%feature("director")解决它,但这不是我案例中的最佳解决方案.

从我在本页中看到的,Go中的函数指针应该与C++中的相同,所以我尝试了以下.swig文件:

%{
#include "test.h"
%}

%typemap(gotype) FUNC* "func()"
%typemap(in) FUNC* {
  $1 = (void(*)(void))$input;
}
%apply FUNC* { void(*)(void) };

%include "test.h"
Run Code Online (Sandbox Code Playgroud)

我很安静地感到惊讶,它起初工作,但后来注意到它并不总是有效:(.

例如,在此Go代码中,它按预期工作:

import "fmt"
import "test_wrap"

func main() {
  b := false
  test_wrap.TestFunc(func() { b = true })
  fmt.Println(b)  // This actually DOES print "true"!
}
Run Code Online (Sandbox Code Playgroud)

但在其他情况下,它不起作用.例如,这里:

import "fmt"
import "test_wrap"

func main() {
  test_wrap.TestFunc(func() { fmt.Println("SUCCESS") })
  fmt.Println("Done")
}
Run Code Online (Sandbox Code Playgroud)

我真的得到:

SUCCESS
SIGILL: illegal instruction
PC=0x4c20005d000


goroutine …
Run Code Online (Sandbox Code Playgroud)

c++ swig interop language-interoperability go

4
推荐指数
1
解决办法
1396
查看次数

Objective C&Swift互操作性导致错误"扩展可能不包含存储的属性"

我正在研究我在Objective C上完成的一个应用程序.我需要为它添加一个新模块,我决定将Swift用于该特定模块.

我有一个HomePage在Objective C中调用的类,我想在其中添加一些新的IBActions和IBOutlets.为此,我添加了一个新的swift文件并扩展了现有的类,如:

// MARK: IBOutlets and IBActions
extension HomePage
{
    @IBOutlet var image : UIImageView!
    ...

    /*!
    * Loads the application support webpage
    */
    @IBAction func loadSupportURL(sender : UIButton)
    {
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

如果我只添加IBActions,一切都很完美.但是当我添加一个IBOutlet时,编译器会抛出一个错误:

扩展名可能不包含存储的属性

为了解决这个问题,我有两种方法,

  1. 在我的Objective C类中声明出口
  2. 将整个Objective C类转换为Swift并在那里声明属性

有没有其他方法可以解决这个问题?

objective-c language-interoperability iboutlet ios swift

4
推荐指数
1
解决办法
6248
查看次数

D和C ++当前互操作性状态

我想学习D,但是我不太了解重要的事情。C ++和D之间的当前互操作性状态如何?

我确定不可能链接到C ++编译的二进制文件,因为它甚至不能与C ++编译器一起使用。但是,如果我有C ++库的源代码和一些D源代码,该怎么办?可以让他们说话吗?(希望以一种有效的方式)。

不同的C ++版本(C ++ 98、11、14、17和将来的版本)如何?

c++ programming-languages d language-interoperability abi

4
推荐指数
2
解决办法
379
查看次数

dart/flutter:使用 ffi 从 C/C++ 获取数据数组?

通过 ffi 的 C/C++ 互操作的官方 flutter 教程只涉及调用 C++ 函数和获取单个返回值。

目标

如果我在 C/C++ 端创建了一个数据缓冲区,但想传递到 dart/flutter 端显示怎么办?

问题

根据@MilesBudnek 的提示,我正在通过尝试从 Dart 到 C/C++ 进行安全的内存释放来测试 Dart 的 FFI。测试重用了官方的 struct sample

我可以将 Array 作为 dart 获取Pointer,但我不清楚如何轻松地将数组迭代为集合。

代码

我正在实现一个像这样的 Dart 端 C 数组绑定:

struct.h

struct Array
{
    int* array;
    int len;
};
Run Code Online (Sandbox Code Playgroud)

和一对简单的分配/解除分配测试函数:

struct Array* get_array();
int del_array(struct Array* arr);
Run Code Online (Sandbox Code Playgroud)

然后在 Dart 端structs.dart

typedef get_array_func = Pointer<Array> Function();
typedef del_array_func = void Function(int arrAddress);

...

  final getArrayPointer …
Run Code Online (Sandbox Code Playgroud)

c++ language-interoperability dart flutter

4
推荐指数
1
解决办法
2821
查看次数

如何等待来自 golang wasm 的 js 异步函数?

我写了一个小函数await来处理 go 中的异步 javascript 函数:

func await(awaitable js.Value) (ret js.Value, ok bool) {
    if awaitable.Type() != js.TypeObject || awaitable.Get("then").Type() != js.TypeFunction {
        return awaitable, true
    }
    done := make(chan struct{})


    onResolve := js.FuncOf(func(this js.Value, args []js.Value) interface{} {
        glg.Info("resolve")
        ret = args[0]
        ok = true
        close(done)
        return nil
    })
    defer onResolve.Release()

    onReject := js.FuncOf(func(this js.Value, args []js.Value) interface{} {
        glg.Info("reject")
        ret = args[0]
        ok = false
        close(done)
        return nil
    })
    defer onReject.Release()

    onCatch := js.FuncOf(func(this js.Value, args []js.Value) …
Run Code Online (Sandbox Code Playgroud)

javascript language-interoperability go webassembly

4
推荐指数
1
解决办法
1541
查看次数

强制定义Go结构以将unsafe.Pointer()转换为C结构

与C代码互操作,我无法直接转换结构,我被迫在Go中定义一个等效的结构.来自的C函数libproc.h

int proc_pidinfo(int pid, int flavor, uint64_t arg,  void *buffer, int buffersize)
Run Code Online (Sandbox Code Playgroud)

为C结构flavor==PROC_PIDTASKINFOproc_taskinfo如在定义sys/proc_info.h(由包括libproc.h):

struct proc_taskinfo {
    uint64_t        pti_virtual_size;   /* virtual memory size (bytes) */
    uint64_t        pti_resident_size;  /* resident memory size (bytes) */
    uint64_t        pti_total_user;     /* total time */
    uint64_t        pti_total_system;
    uint64_t        pti_threads_user;   /* existing threads only */
    uint64_t        pti_threads_system;
    int32_t         pti_policy;     /* default policy for new threads */
    int32_t         pti_faults;     /* number of page faults */
    int32_t         pti_pageins;        /* number …
Run Code Online (Sandbox Code Playgroud)

c pointers language-interoperability go

3
推荐指数
1
解决办法
236
查看次数

以协议作为参数的ObjC泛型集合转换为[AnyObject]

为什么protocols属性在swift中被翻译为[AnyObject],而不是[P]

@protocol P;
@class C;

@interface TestGenerics: NSObject

@property  NSArray<C*>* classes;
@property NSArray<P>* protocols;

@end
Run Code Online (Sandbox Code Playgroud)

在Swift中它看起来像这样:

public class TestGenerics : NSObject {

    public var classes: [C]
    public var protocols: [AnyObject]
}
Run Code Online (Sandbox Code Playgroud)

更新:找到解决方案

@property NSArray<NSObject<P>*>* protocols;
Run Code Online (Sandbox Code Playgroud)

或者像建议的newacct

@property NSArray<id<P>>* protocols;
Run Code Online (Sandbox Code Playgroud)

被翻译成:

public var protocols: [P]
Run Code Online (Sandbox Code Playgroud)

generics objective-c language-interoperability swift

3
推荐指数
1
解决办法
2056
查看次数

无法从ctypes获取fortran函数输出

我正在尝试使用ctypes从Python调用Fortran函数.我试图从子程序和函数(两者都具有相同的功能)获得结果,但我无法从函数中获得预期的输出,而子程序运行良好.问题是我有很多库使用Fortran函数而不是子例程.Fortran函数和ctypes有什么问题吗?

一段Fortran代码:

MODULE Vector
! Public types
 TYPE VectorType
    PRIVATE
    DOUBLE PRECISION, DIMENSION(3):: components = 0.0d0
 END TYPE VectorType
!---------------------------------------------------------------------    
 CONTAINS 
!---------------------------------------------------------------------
 SUBROUTINE newVect(this,vectorIn)
 TYPE (VectorType),       INTENT(OUT):: this
 DOUBLE PRECISION, DIMENSION(3), INTENT(IN)::vectorIn

   this%components = (/vectorIn(1), vectorIn(2), vectorIn(3)/)

 END SUBROUTINE newVect
!---------------------------------------------------------------------
 SUBROUTINE subVect(this,vectorOut)

 TYPE(VectorType), INTENT (OUT):: vectorOut
 TYPE(VectorType), INTENT (IN) :: this

   vectorOut%components = this%components

 END SUBROUTINE subVect
!----------------------------------------------------------------------
 TYPE(VectorType) FUNCTION getVect(this) RESULT(vectorOut)

 TYPE(VectorType), INTENT (IN) :: this

   vectorOut%components = this%components

  END FUNCTION getVect
!--------------------------------------------------------------------
END MODULE Vector
Run Code Online (Sandbox Code Playgroud)

我正在使用的Python代码是:

import …
Run Code Online (Sandbox Code Playgroud)

python fortran ctypes language-interoperability

3
推荐指数
1
解决办法
267
查看次数

如何从 Java 访问 Kotlin 的“backtickedFunctions”?

长话短说:

java中是否有一个简单的语法来访问kotlins反引号函数,例如fun `if`(){...}

长版:

在 Kotlin 中,人们可以编写以下类。

class ShapeShifter {
    fun speak() { println("Hello fellow hooman") }
    fun `speakLikeA`() { println("Meow") }
    fun `speakLikeA`() { println("Bwoof !") }
    fun `speakLikeA`() { println("NOOT NOOT ! (you would'nt have so much problems with linux ...)") }
}
Run Code Online (Sandbox Code Playgroud)

这会工作得很好......你所有的 kotlin-ers 同事都可以以你所有的形式与你交谈,如下所示:

ShapeShifter().`speakLikeA`() // would work like a charm
Run Code Online (Sandbox Code Playgroud)

但是当与 java-ist 麻瓜互动时,你的秘密身份将是安全的,因为我很确定 java-ist 只能像这样与你互动:

new ShapeShifter().speak()
Run Code Online (Sandbox Code Playgroud)

我的问题是:有没有一种方法可以让 java 普通人访问反引号的 kotlin 函数,而无需诉诸使用黑魔法,例如内省/反射,如下所示:

var tomJedusor = new ShapeShifter();
ShapeShifter.class.getDeclaredMethod("speakLikeA").invoke(tomJedusor); //the forbidden arcane spell …
Run Code Online (Sandbox Code Playgroud)

java syntax idioms language-interoperability kotlin

3
推荐指数
1
解决办法
67
查看次数