标签: language-interoperability

是否可以在QWebView中从JavaScript调用C++函数?

我在QWebView中加载了一个网页.在那里,我想让JavaScript调用我的应用程序的功能.然后该函数将返回JavaScript将动态显示的一些字符串.

可以使用QWebView完成吗?基本上,是否可以在应用程序(在C++中)和QWebView控件之间建立桥梁?

javascript c++ qt language-interoperability qwebview

13
推荐指数
1
解决办法
6878
查看次数

我该如何测试Kotlin扩展功能?

有人可以告诉我如何在Kotlin中对扩展功能进行单元测试?因为它们是静态解析的,它们应该作为静态方法调用还是非静态方法进行测试?此外,由于语言可与Java完全互操作,因此应如何执行Kotlin扩展函数的Java单元测试?

java testing unit-testing language-interoperability kotlin

13
推荐指数
1
解决办法
4251
查看次数

在Objective-c上使用静态Swift方法时,"没有已知的选择器类方法"

我已经获得了Objective C代码,我需要为它添加额外的功能.我对Objective C非常不熟悉所以尽我所能在Swift上做对我来说非常理想.

这是我的Swift文件/类:

import Foundation
import UIKit

@objc class ImageBarSize: NSObject{

  static func changeContadorImageSize(img:UIImage, newSize:CGSize) -> UIImage{
    UIGraphicsBeginImageContextWithOptions(newSize, true, 0.0)
    let x:CGFloat = 0
    let y:CGFloat = 0
    img.draw(in: CGRect(x:x,y:y,width:newSize.width,height:newSize.height))
    let newImage:UIImage = UIGraphicsGetImageFromCurrentImageContext()!
    UIGraphicsEndImageContext()
    return newImage;
  }
}
Run Code Online (Sandbox Code Playgroud)

这是我的Objective C .m文件中的代码:

 imgBarCounter = [UIImage imageNamed:@"bar-counter-pd.png"]; 

 self.image = [ImageBarSize changeContadorImageSize:imgBarCounter newSize:CGSizeMake(300, 300)];
Run Code Online (Sandbox Code Playgroud)

我得到错误"选择器没有已知的类方法'changeContadorImageSize:newSize:'".

我完成了整个桥接过程

 #import <WHS_Live_2-Swift.h>
Run Code Online (Sandbox Code Playgroud)

在文件的开头,这一切似乎都运行正常.我已经在SO上查看了类似的错误线程,但无济于事.

objective-c language-interoperability ios swift

12
推荐指数
1
解决办法
6015
查看次数

如何从CPython调用java对象和函数?

我有一个python程序,它运行在CPython实现上,在其中我必须调用java程序中定义的函数.我怎样才能做到这一点?

能够使用一些java对象会很高兴.

Jython不是一个选择.我必须在CPython中运行python部分.

python java function language-interoperability

11
推荐指数
3
解决办法
8277
查看次数

如何将Scala数组[Byte]转换为Java byte []?

我有一个Akka应用程序,其中的演员用Scala编写,其他用Java编写.在一个案例中,Scala Actor写了一个Array[Byte],我需要从Java Actor反序列化它.在这个用例中,我最终需要Java中的String表示,Array[Byte]这样才能解决我的问题.

斯卡拉演员:

val outputStream = new java.io.ByteArrayOutputStream()
val bufferedOutputStream = new java.io.BufferedOutputStream(outputStream, 1024)
val exitCode : Integer = processBuilder #> bufferedOutputStream !
bufferedOutputStream.flush
val content = outputStream.toByteArray // this gives an Array[Byte]
javaActorRef.tell(content, getSelf())
Run Code Online (Sandbox Code Playgroud)

Java演员:

/**
 * {@inheritDoc}
 */
@Override
public void onReceive(Object object) throws Exception {
    // object has a Scala Array[Byte] how do I convert here to 
    // byte[] or to String?
Run Code Online (Sandbox Code Playgroud)

java interop scala language-interoperability

11
推荐指数
1
解决办法
8936
查看次数

Swift&Objective-C项目 - 生成-Swift.h错误 - 无法找到UIViewController的接口声明

我有一个项目使用Swift生成的Bridging Header并正确设置项目(名称中没有空格,使用模块,在我的.mm文件中预先声明Swift类,删除派生数据,进行干净重建等等). ).Bridging Header生成正常,但自动生成的-Swift.h中有错误.更糟糕的是,这些错误发生在AppDelegate和ViewController的生成(在项目创建 - Swift)版本中,通常可以正常编译.-Swift.h中的错误是:

  • @interface AppDelegate : UIResponder <UIApplicationDelegate>
    >>无法找到'UIResponder'的接口声明,'AppDelegate'的超类
    >>找不到'UIApplicationDelegate'的协议声明
  • @interface ViewController : UIViewController
    >>无法找到'UIViewController'的接口声明,'ViewController'的超类

我搜索了Stack Overflow和网络,找不到解决这个问题的任何答案.还有其他人有这个吗?或者,有没有办法可以标记我的AppDelegate和ViewController类,因此Xcode 不会尝试为那些Swift类创建Objective-C存根,因为我实际上并不需要它们?

xcode objective-c language-interoperability ios swift

11
推荐指数
2
解决办法
2564
查看次数

涉及C.free()的C和Go互操作性问题

我有一个包含proc_name(pid,...)函数的Go函数lib_proc.h.

这是完整的C原型:


int proc_name(int pid, void * buffer, uint32_t buffersize) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);
Run Code Online (Sandbox Code Playgroud)

可以在这里找到/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/include/libproc.h(至少在我的系统上).

它遵循Go代码:


package goproc

    /*
    #include "libproc.h"

    int call_proc_name(int pid, char *name, int name_size) {
      return proc_name(pid, name, name_size);
    }
    */
    import "C"
    import "unsafe"
    import "strings"

    type DarwinProcess struct {
        Process
    }

    func (DarwinProcess) NameOf(pid int) string {
        name := C.CString(strings.Repeat("\x00", 1024))
        defer C.free(unsafe.Pointer(name))
        nameLen := C.call_proc_name(C.int(pid), name, C.int(1024))
        var result string

        if (nameLen > 0) {
            result = C.GoString(name); …
Run Code Online (Sandbox Code Playgroud)

c language-interoperability go

11
推荐指数
1
解决办法
3715
查看次数

语言互操作性的最佳实践是什么?

在需要使用多种语言的系统中,当代码调用另一种语言的代码时,确保松散耦合架构的最佳实践是什么?

architecture interop language-interoperability

9
推荐指数
1
解决办法
373
查看次数

如何使用char**参数将Swift字符串数组传递给C函数

我正在尝试与Swift的旧C终端应用程序进行交互.我已成功集成源代码并将标头从C桥接到Swift.该代码从Xcode 6.3 beta编译并运行.我已将终端应用程序的主要入口点重命名为:

int initialize(int argc, char **argv);
Run Code Online (Sandbox Code Playgroud)

然而,我正在努力将Swift中的参数传递给这个C函数.我的挑战是以正确的格式转换参数.Swift的典型输入看起来像:

let args = ["-c", "1.2.3.4", "-p", "8000"]
Run Code Online (Sandbox Code Playgroud)

我已经尝试搞乱"cStringUsingEncoding(NSUTF8StringEncoding)"和"withUnsafePointer",但到目前为止还没有运气.任何帮助是极大的赞赏!

c language-interoperability swift

9
推荐指数
1
解决办法
1732
查看次数

在C#winforms中使用C++库

我正在尝试在OpenTK中使用SPARK粒子系统.
我的项目包含文件夹中的头文件,只有两个头文件只包含其他文件,文件夹也包含源文件.
到目前为止,我已尝试了几种方法,但对我来说没有任何效果,这些都是我尝试过的:

1. P/Invoke

这是在你的C++项目中编写一些代码,它构建了dll,然后DllImport在C#中使用了属性(显然需要using System.Runtime.InteropServices;).我发现这种方法不适用于类很难,它只适用于类外的方法,因此这种方法无效.

2.包装类

这是编写一个包含指向原始类的指针的类.我发现实际上困难来自于从托管代码调用非托管代码(没有自动内存管理),这就是为什么需要包装类,这就是为什么你必须重新定义方法的签名并让它们调用原始方法.

当然这有一些优点,比如以更好的方式命名类和方法,但是库是如此之大,所以你可以看到它的努力.

3.使用自动包装机:

这是一种很好的方法,特别是对于xInterop ++.我对此非常乐观,并认为它会起作用,它说"给我.h文件和dll,我将为你构建.NET dll".很好,但这样做会给出错误; 简单来说:

您必须确保.h文件和dll是一致的,并且该库在C++项目中工作.

我已经尝试了几件事来处理这个错误:

  1. 知道dll包含什么:我从谷歌搜索和从这个网站学到的很难,所以我的尝试失败了.
  2. 将头文件放在一个新项目中并构建它:收到错误,修复它们,然后构建项目,它运行良好.我将带有头文件的dll文件上传到xInterop.然后它告诉已发现的类,但随后会说没有找到任何东西!我搜索并了解到编译器必须通过使用以下语句标记所需的每个类来告知dll需要暴露哪些类:_declspec(dllexport).
  3. 我使用Find&Replace来修复这个东西并再次尝试并显示了类,所以我启动了xInterop并收到了同样的错误.
  4. 它要求确保dll正常工作.验证文件有效后,我启动了程序并生成了链接器错误.

这是我被卡住的地方,这些是我得到的链接器错误:

main.obj:错误LNK2019:未解析的外部符号"void __cdecl SPK :: swapParticles(类SPK :: Particle&,类SPK :: Particle&)"(?swapParticles @ SPK @@ YAXAAVParticle @ 1 @ 0 @ Z)在函数"private:void __thiscall SPK :: Pool :: swapElements(class SPK :: Particle&,class SPK :: Particle&)"(?swapElements @?$ Pool @ VParticle @ SPK @@@ SPK @@ AAEXAAVParticle @ 2 @ 0 @ Z)main.obj:错误LNK2001:未解析的外部符号"unsigned int SPK :: randomSeed"(?randomSeed @ …

c# c++ dll language-interoperability wrapper

8
推荐指数
2
解决办法
1510
查看次数