标签: language-interoperability

从coldfusion调用.net对象的方法

我试图实例化并调用从coldfusion从dll创建的.net对象上的方法.当我使用一个或零参数调用方法但是失败时,这适用于 -

System.MissingMethodException:找不到通用方法coldfusion2net.test.setvars

当我尝试使用多个arg调用方法时.

这是我简单的C#类:

namespace coldfusion2net
{
    public class test
    {
        protected string myvar;
        protected string myvar2;
        public void setvars(string v, string v2) {
            myvar = v;
            myvar2 = v2;
        }
        public void setvar(string v) {
            myvar = v;
        }
        public string getvar(){
            return myvar;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的ColdFusion测试:

<cfset dll = ExpandPath('./coldfusion2net.dll')>
<cfobject type=".NET" name="test" class="coldfusion2net.test" assembly="#dll#">
<cfset test.init()>
<!--- object has been loaded --->
<cfdump var="#test#">
<!--- so far so good --->
<cfset test.setvar("foo")>
<cfset s = …
Run Code Online (Sandbox Code Playgroud)

.net c# coldfusion language-interoperability

7
推荐指数
1
解决办法
2382
查看次数

Java和C#之间的桥梁

我被赋予了在C#和Java之间建立桥梁的任务.据说如果我们现在使用C#,然后我们从其他地方收到一个Java文件,我们应该能够将该Java文件转换为.NET,这样它就可以与我们的软件兼容.问题是我不知道该做什么或如何开始这项任务.有什么建议或意见吗?

有人说我最初必须制作平台独立的课程,如果这有帮助的话.

*编辑:对不起,如果我第一次不清楚,因为我自己并不完全了解这个任务,这就是我在这里的原因.但据我所知,我必须创建桥本身,我可以从我的.NET文件中调用源代码.我有几个月的时间来完成它,所以我认为我必须使每个Java库与C#兼容.

我四处寻找帮助,发现了一些类似的项目:JNBridge(付费使用),有形(免费演示)和Janett(开源),这就是我的观点.

**编辑:比如说我用Java创建一个Calculator类.我想在C#中创建该类的实例.

c# java language-interoperability platform-independent

7
推荐指数
1
解决办法
7261
查看次数

避免在多种不同语言中编写相同的算法

我是一名Web开发人员,我观察到很多次我需要在客户端和服务器上使用相同的功能.所以我用JS以及PHP或任何服务器端语言编写它.我厌倦了这个.如果我必须改变它,那么我需要在两个地方改变它.如果我想将它用于某些手持设备,那么我将不得不再次使用Objective-C或Java等重写该代码.然后,如果我需要更改该功能,那么我将需要在任何地方更改它.

这有解决方案吗?如果我将通过ajax调用一些web服务,那么客户端将有延迟.如果它将在JS中,则无法从PHP或Java等中访问它.如果我使用其他语言的PHP中的某些服务,那么这也可能成为性能问题.

也有一段时间我们需要使用db或不使用db从某些参数输出这些函数作为输入.

我知道会有一些非常简单的解决方案,但我不知道.请告诉我一些语言无关的解决方案,因为我总是没有VPS.

我不确定我的问题是否真的属于stackoverflow.com或programmers.stackexchange.com所以请将它转移到programmers.stackexchange.com而不是关闭这个问题,如果它属于那里.

javascript code-reuse web-services language-interoperability

7
推荐指数
1
解决办法
257
查看次数

互操作性如何工作

我知道许多大型应用程序(如视频游戏)都是使用多种语言创建的.例如,游戏/物理引擎可能是用C++编写的,而游戏任务,GUI则是用Python或Lua编写的.

我理解为什么这种角色划分已经完成; 将低级语言用于需要极端优化,调整,效率和速度的任务,同时使用更高级语言来加速生产时间,减少令人讨厌的错误等.

最近,我决定进行一个更大的个人项目,并希望将项目的部分内容与上述类似.在这个时间点,我真的很困惑语言之间的互操作性(尤其是编译与解释)之间的互操作性.

我很熟悉从ANSCII代码测试到加载可​​执行文件的细节,当用C/C++编写时.我非常好奇从像许多不同语言构建的视频游戏这样的东西起作用.这是一个大/广泛的问题,但具体我对以下内容感兴趣:

  • 代码级逻辑如何工作?即我如何从C++程序调用Python代码?特别是因为它们不支持相同的内置类型?
  • 程序图像是什么样的?据我所知,视频游戏是在一个进程中运行的,那么运行调用Python函数的C/C++程序时运行时图像是什么样的呢?
  • 如果从编译的程序中调用解释语言中的代码,那么发生的事件序列是什么?即如果我在我编译的可执行文件中,并且由于某种原因在循环内调用了解释语言,我是否必须每次迭代都等待解释器?

我实际上很难找到关于机器级别发生的事情的信息,所以任何帮助都会受到赞赏.虽然我对软件的互操作一般感到好奇,但我对C++和Python的交互特别感兴趣.

非常感谢您的任何见解,即使它只是指向我可以找到更多信息的地方.

c++ python language-interoperability game-engine

7
推荐指数
1
解决办法
616
查看次数

C和C++中类型的互操作性

一个非常简单的问题:在同一系统上,有没有保证C int与C++是同一个东西int

毫无疑问,这当然是纯粹的理论问题.

C和C++标准使用相同的语言来定义基本类型.但Fortran 2003明确表示

use ISO_C_BINDING
integer(kind=c_int) :: i
Run Code Online (Sandbox Code Playgroud)

声明一个与int"伴随C处理器"上的类型兼容的整数类型,我在C++标准中找不到任何这样的断言.Fortran提供比C++更强大的C互操作性保证似乎很奇怪!

我能找到的最接近的是7.5节[dcl.link],C++ 11标准的第3段,其中指出了这一点

每个实现都应提供与用C编程语言编写的函数的链接

但是这个小句子(对我而言)似乎不足以保证基本类型的兼容性.

C++标准中是否有其他一些我忽略的语言可以保证这一点,或者它是否显然被认为是理所当然的,没有人打扰明确说明它?

编辑:大卫施瓦茨在评论中指出,当我说"同一系统"时,我是不精确的.我真的是指同一个"平台",即硬件,操作系统,系统库等.当然,它确实是一个ABI问题.在引用的段落中,C++标准似乎想表明你可以调用C函数extern "C",但我不确定它是否提供了足够的其他保证?

c c++ language-interoperability language-lawyer

7
推荐指数
1
解决办法
176
查看次数

Fortran-C++互操作性:通过void指针传递数组

我大致有以下情况.我有一个从Fortran代码调用的C++函数,并将函数指针和void指针作为这样的参数

int STDCALL FORTRAN_NAME(CPPFunction, CPPFUNCTION)(
    int (*userFunction)(const int *object,
                        const void *userFunctionUserData),
    const void *userData)
{
  // ...
    int index;
    int result;
  // ...
    result = userFunction(&index, userData);
  // ...
}
Run Code Online (Sandbox Code Playgroud)

这是从Fortran这样调用的

! ...
DOUBLE PRECISION, ALLOCATABLE :: data(:,:)
INTEGER :: n, result

! ...

ALLOCATE(data(3,n)); data = 0.0

! ... fill data with something

result = CPPFUNCTION(FORTRANFUNCTION, data)
! ...
Run Code Online (Sandbox Code Playgroud)

我希望通过函数指针传递的Fortran函数看起来像

INTEGER FUNCTION FORTRANFUNCTION(idx, data)
IMPLICIT NONE

INTEGER, INTENT(IN) :: idx
DOUBLE PRECISION, INTENT(IN) :: data(*)
INTEGER :: i, …
Run Code Online (Sandbox Code Playgroud)

c++ fortran function-pointers language-interoperability void-pointers

7
推荐指数
0
解决办法
816
查看次数

从Clojure调用Java

当我尝试在Clojure中运行以下代码(来自REPL)时:

(dotimes [i 5]
  (.start
   (Thread.
    (fn []
      (Thread/sleep (rand 1000))
      (println (format "Finished %d on %s" i (Thread/currentThread)))))))
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

java.lang.Exception: Unable to resolve symbol: i in this context
clojure.lang.Compiler$CompilerException: NO_SOURCE_FILE:6: Unable to resolve symbol: i in this context
        at clojure.lang.Compiler.analyze(Compiler.java:3713)
Run Code Online (Sandbox Code Playgroud)

我在这做错了什么?

java clojure language-interoperability

6
推荐指数
1
解决办法
3207
查看次数

实现不安全的Java接口

我最近在使用Spring Security进行开发时遇到了问题.它有一个GrantedAuthority带有以下签名的界面:

public interface GrantedAuthority extends Serializable, Comparable
Run Code Online (Sandbox Code Playgroud)

至于Java 1.5及更高版本,接口Comparable采用了一个类型参数T,在Spring Security库中省略了(显然,对于JVM 1.4兼容性).

所以我想GrantedAuthority在Scala中实现.

class Role extends GrantedAuthority {
  . . .
  def compareTo(obj: Any): Int = obj match {
    case (r: Role) => r.toString.compareTo(this.toString)
    case _ => -1
  }
}
Run Code Online (Sandbox Code Playgroud)

它不编译:

error: class Role needs to be abstract, since method compareTo in trait Comparable of type (T)Int is not defined
Run Code Online (Sandbox Code Playgroud)

如何在Scala中实现这样的接口?

inheritance scala language-interoperability

6
推荐指数
1
解决办法
313
查看次数

在Objective-C中使用时,有时不会调用在Swift类中声明的运算符重载"<"

我遇到了一个与Swift/Objective-C互操作性相关的奇怪问题.案例是这样的:

我有一个@objc public class GKDistance:NSObject,NSCoding,Comparable用Swift写的.为了比较距离,我添加了一个运算符重载,<如下所示:

public func <(a:GKDistance, b:GKDistance) -> Bool {
    return a.value < b.value
}

public func ==(a:GKDistance, b:GKDistance) -> Bool {
    return a.value == b.value
}
Run Code Online (Sandbox Code Playgroud)

然后将它用于Objective-C方法,如下所示:

if (distance < averageDistance){
    // code
}
Run Code Online (Sandbox Code Playgroud)

调用Objective-C方法时,我可以print()<方法中添加语句和断点,以确认何时使用运算符重载.在一种情况下,它神秘地跳过Swift中定义的运算符重载,并使用两个GKDistance对象之间的常规Objective-C比较器.

当使用distance.value == 2375.1842554877021and 运行时averageDistance.value == 75.671794891357421,distance < averageDistance返回时true,Swift运算符重载永远不会被命中,而Objective-C执行条件内的代码.

如果我将有问题的Objective-C方法转换为Swift,它的行为与预期一致,但我担心在我们的应用程序中各种Objective-C方法中存在其他GKDistance比较,可能无法看到Swift运算符重载.

有没有人遇到与Swift/Objective-C互操作性类似的问题,因为它与运营商重载有关?

operator-overloading objective-c language-interoperability swift

6
推荐指数
1
解决办法
335
查看次数

如何在 C++ 数据结构中存储 Fortran 风格的长字符标量

我正在使用一个旧的 Fortran 库,它需要一个字符标量PATH作为子例程的参数。原来的界面是:

SUBROUTINE MINIMAL(VAR1, ..., PATH)

CHARACTER (LEN=4096) PATH

...
Run Code Online (Sandbox Code Playgroud)

我需要能够从 C++ 调用它,因此我进行了以下更改:

SUBROUTINE MINIMAL(VAR1, ..., PATH) &
    BIND (C, NAME="minimal_f")

    USE ISO_C_BINDING, ONLY: C_CHAR, C_NULL_CHAR

    CHARACTER (KIND=C_CHAR, LEN=1), DIMENSION(4096), INTENT(IN) :: PATH
    CHARACTER (LEN=4096):: new_path

!   Converting C char array to Fortran CHARACTER.
    new_path = " "
    loop_string: do i=1, 4096
        if ( PATH (i) == c_null_char ) then
            exit loop_string
        else
            new_path (i:i) = PATH (i)
        end if
    end do loop_string
Run Code Online (Sandbox Code Playgroud)

根据这个答案。这可以将 C …

c c++ fortran language-interoperability

6
推荐指数
1
解决办法
338
查看次数