从coldfusion调用.net对象上的方法

Posted

技术标签:

【中文标题】从coldfusion调用.net对象上的方法【英文标题】:calling methods on .net object from coldfusion 【发布时间】:2011-06-10 17:11:31 【问题描述】:

我正在尝试实例化和调用从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;
        
    

这是我的 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 = test.getvar()>
<cfoutput>#s#</cfoutput>
<!--- wtf??? --->
<cfset test.setvars("foo","bar")>

为了编译 dll,我使用了针对 .net 3.5 运行时的 Visual Studio 2010(这是我们服务器上的运行时)。我正在使用 ColdFusion 8,0,0,176276 来尝试加载 dll。

有没有其他人见过这样的事情?难道我做错了什么?这是 CF 错误吗?

我查看了有关 .NET 互操作性限制的 Adob​​e 实时文档的文章,但我发现最接近的是“如果方法具有多个签名且参数数量相同且仅不同的签名,则 ColdFusion 无法确定正确的数据类型转换在参数数据类型中”。这似乎不是这里的问题。

【问题讨论】:

CFdump #test# 对象。你看到 setVars() 方法了吗? 你试过javacast("string","foo")吗? @Leigh 当我转储对象时,我看到了所有方法。有问题的方法说 - setvars(java.lang.String, java.lang.String) @Henry 尝试了 javacast,得到了同样的错误 hmm...也许你可以让那个 .dll 供我们在 CF9.0.1 中测试? 【参考方案1】:

不确定这是否有帮助,但是...

将 .NET 版本升级到 3.5 导致问题,因为 ColdFusion .NET 集成服务 已将自身配置为使用 .NET 框架的早期版本。 卸载然后重新安装 ColdFusion .NET 集成服务 解决了我的问题。

http://forums.adobe.com/thread/25391?tstart=0

【讨论】:

【参考方案2】:

这里只是跟进。移至 CF9 解决了这个问题。我从来没有弄清楚如何让它在 8 岁以下工作。

【讨论】:

以上是关于从coldfusion调用.net对象上的方法的主要内容,如果未能解决你的问题,请参考以下文章

使用ColdFusion从Outlook .msg文件中提取附件

当Coldfusion从'jar'文件中调用方法时,未编译的Java程序可以正常工作,但会产生错误?

为什么不能在Coldfusion中顺序调用同一组件的两个方法?

从 Objective-C 中的 ColdFusion 布尔返回类型获取 BOOL 的更好方法?

在破坏调用期间从另一个线程未定义的行为调用对象上的方法?

ColdFusion .Net 集成错误:未安装 DotNetExtension