我有一个berkeley db文件(*.bdb),由C实现(python bsddb模块)创建.是否可以通过Berkeley Db的纯Java实现读取此文件?我尝试使用berkeley db java edition(je)读取它,但不能.je抛出一个例外,说它无法检测到伯克利数据库.berkeley数据库文件在不同的实现中是不可互操作的吗?如果是这样,为什么?
我正在尝试调用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) 我正在研究我在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时,编译器会抛出一个错误:
扩展名可能不包含存储的属性
为了解决这个问题,我有两种方法,
有没有其他方法可以解决这个问题?
我想学习D,但是我不太了解重要的事情。C ++和D之间的当前互操作性状态如何?
我确定不可能链接到C ++编译的二进制文件,因为它甚至不能与C ++编译器一起使用。但是,如果我有C ++库的源代码和一些D源代码,该怎么办?可以让他们说话吗?(希望以一种有效的方式)。
不同的C ++版本(C ++ 98、11、14、17和将来的版本)如何?
通过 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) 我写了一个小函数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) 与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_PIDTASKINFO是proc_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) 为什么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) 我正在尝试使用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) 长话短说:
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)