对于某些背景,这与 将 IEnumerable 变量从冷融合.我已将代码更改为使用列表,并取得了进展,但在使用 .NET 和 ColdFusion 的简单数据类型以外的任何内容时,仍会遇到障碍.所以这是当前的问题.
For some background, this is related to Passing IEnumerable Variables into .NET from ColdFusion. I've changed the code to use a list instead, and have made progress, but continue to hit roadblocks when using anything other than simple data types with .NET and ColdFusion. So here's the current issue.
首先,我有一个包含以下 VideoWallEvent.cs 文件的 .dll:
First, I have a .dll with the following VideoWallEvent.cs file:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace CoStar.Utilities.VideoWall
{
public class VideoWallEventActivityCollection
{
public string CountryCode { get; set; }
public DateTime ActivityDate { get; set; }
public List<VideoWallEvent> Events { get; set; }
}
public class VideoWallEvent
{
public string ID { get; set; }
public decimal Latitude { get; set; }
public decimal Longitude { get; set; }
public VideoWallEvent(string EventID, decimal EventLatitude, decimal EventLongitude)
{
ID = EventID;
Latitude = EventLatitude;
Longitude = EventLongitude;
}
}
}
我还按照上一个问题的说明使用 JNBProxyGUI.exe
生成了一个代理对象对象.给出上面的 dll 和我生成的代理 jar,我运行以下 ColdFusion 代码:
I've also generated a proxy object object using JNBProxyGUI.exe
following instructions from the prior question. Give that the above dll, and the proxy jar I've generated, I run the following ColdFusion code:
<cfset UtilitiesProxy = ExpandPath("UtilitiesProxy.jar") />
<cfset CoStarUtilities = ExpandPath("CoStar.Utilities.dll") />
<cfset Paths = ArrayToList([CoStarUtilities, UtilitiesProxy])>
<cfset theEvent = CreateObject(".net", "CoStar.Utilities.VideoWall.VideoWallEvent", Paths) />
<cfset eventList = CreateObject(".net","System.Collections.Generic.List`1", Paths).init(theEvent.getDotNetClass()) />
<cfset eventList.Add(theEvent.Init("1234", javacast("bigdecimal","30.2669444"), javacast("bigdecimal","-97.7427778"))) />
<cfset eventList.Add(theEvent.Init("1235", javacast("bigdecimal","30.2669444"), javacast("bigdecimal","-97.7427778"))) />
<cfset eventCollection = CreateObject(".net", "CoStar.Utilities.VideoWall.VideoWallEventActivityCollection", CoStarUtilities) />
<cfdump var="#eventList.ToArray()#" label="Items in eventList" />
<hr />
<cfdump var="#eventCollection#" label="eventCollection" />
<cfdump var="#eventList#" label="eventList" />
<cfset eventCollection.Set_Events(eventList) />
这给了我以下输出:
从屏幕截图中可以看出,我可以成功地将项目添加到列表中,我可以获得需要 List 对象的 ActivityCollection 对象,但是调用 Set_Events
方法并传递 List 会抛出以下错误:
As you can see from the screenshot, I can successfully add items to the list, I can get the ActivityCollection object that expects a List object, but calling the Set_Events
method and passing the List throws the following error:
The Set_Events method was not found.
Either there are no methods with the specified method name and argument types
or the Set_Events method is overloaded with argument types that ColdFusion cannot
decipher reliably. ColdFusion found 0 methods that match the provided arguments.
If this is a Java object and you verified that the method exists, use the javacast
function to reduce ambiguity.
The error occurred in C:/inetpub/scribble/VideoWall/index.cfm: line 17
15 : <cfdump var="#eventList#" label="eventList" />
16 :
17 : <cfset eventCollection.Set_Events(eventList) />
所以我现在需要帮助来弄清楚如何正确地将这个 List 推送到 Set_Events() 方法中.
So I now need help figuring out how to properly push this List into the Set_Events() method.
(来自评论)
信不信由你,这只是一个组装路径问题.你必须使用汇编列表中的两个文件,而不仅仅是CoStarUtilities
,即:
Believe it or not it is just an assembly path problem. You have to use both files in the assembly list, not just CoStarUtilities
, ie:
<cfset eventCollection = CreateObject(".net"
, "CoStar.Utilities.VideoWall.VideoWallEventActivityCollection"
, Paths ) />
这篇关于未找到方法使用 ColdFusion 中的列表调用 .NET 方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持html5模板网!