我试图实例化并调用从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) 我被赋予了在C#和Java之间建立桥梁的任务.据说如果我们现在使用C#,然后我们从其他地方收到一个Java文件,我们应该能够将该Java文件转换为.NET,这样它就可以与我们的软件兼容.问题是我不知道该做什么或如何开始这项任务.有什么建议或意见吗?
有人说我最初必须制作平台独立的课程,如果这有帮助的话.
*编辑:对不起,如果我第一次不清楚,因为我自己并不完全了解这个任务,这就是我在这里的原因.但据我所知,我必须创建桥本身,我可以从我的.NET文件中调用源代码.我有几个月的时间来完成它,所以我认为我必须使每个Java库与C#兼容.
我四处寻找帮助,发现了一些类似的项目:JNBridge(付费使用),有形(免费演示)和Janett(开源),这就是我的观点.
**编辑:比如说我用Java创建一个Calculator类.我想在C#中创建该类的实例.
我是一名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
我知道许多大型应用程序(如视频游戏)都是使用多种语言创建的.例如,游戏/物理引擎可能是用C++编写的,而游戏任务,GUI则是用Python或Lua编写的.
我理解为什么这种角色划分已经完成; 将低级语言用于需要极端优化,调整,效率和速度的任务,同时使用更高级语言来加速生产时间,减少令人讨厌的错误等.
最近,我决定进行一个更大的个人项目,并希望将项目的部分内容与上述类似.在这个时间点,我真的很困惑语言之间的互操作性(尤其是编译与解释)之间的互操作性.
我很熟悉从ANSCII代码测试到加载可执行文件的细节,当用C/C++编写时.我非常好奇从像许多不同语言构建的视频游戏这样的东西起作用.这是一个大/广泛的问题,但具体我对以下内容感兴趣:
我实际上很难找到关于机器级别发生的事情的信息,所以任何帮助都会受到赞赏.虽然我对软件的互操作一般感到好奇,但我对C++和Python的交互特别感兴趣.
非常感谢您的任何见解,即使它只是指向我可以找到更多信息的地方.
一个非常简单的问题:在同一系统上,有没有保证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",但我不确定它是否提供了足够的其他保证?
我大致有以下情况.我有一个从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
当我尝试在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)
我在这做错了什么?
我最近在使用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中实现这样的接口?
我遇到了一个与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
我正在使用一个旧的 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++ ×4
c ×2
c# ×2
fortran ×2
java ×2
.net ×1
clojure ×1
code-reuse ×1
coldfusion ×1
game-engine ×1
inheritance ×1
javascript ×1
objective-c ×1
python ×1
scala ×1
swift ×1
web-services ×1