从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 互操作性限制的 Adobe 实时文档的文章,但我发现最接近的是“如果方法具有多个签名且参数数量相同且仅不同的签名,则 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中顺序调用同一组件的两个方法?