2013-02-12 123 views
0

我在.NET中的QuickFix发动机(使用C++ DLL包装)作战制作一个TradeCaptureReportRequest消息:命名空间的问题

var req = new QuickFix44.TradeCaptureReportRequest(); 
req.set(new QuickFix.SubscriptionRequestType(QuickFix.SubscriptionRequestType.SNAPSHOT_PLUS_UPDATES)); // 263 
req.set(new QuickFix.TradeRequestID("testing" + DateTime.Now.Second.ToString())); // 568 
var nodates = new QuickFix44.TradeCaptureReportRequest.NoDates(); 
nodates.set(new QuickFix.TradeDate("20130201")); 
req.set(nodates); // 580 

一切似乎看起来不错,直到我打电话req.set(nodates),这会导致编译器错误,说“NoDates不能转换为NoDates”

因为当我导航到QuickFix DLL中的TradeCaptureRequest的元数据时,这让我浮想联翩,我向他们展示了这一点。

public void set(NoDates value); 
// as a member of QuickFix44.TradeCaptureReportRequest 

如果我去NoDates的定义,它把我送到了QuickFix44.TradeCaptureReportRequest类中定义的QuickFix44.TradeCaptureReportRequest.NoDates类。

但是有一个NoDatesQuickFix namesapace中定义的类,在我进行以下操作时编译得很好。

req.set(new QuickFix.NoDates(1)); 

我正在使用Quickfix v4.0.30128和.Net包装程序的C++ DLL。

+0

你还没有说过是什么问题。会得到一个异常,编译器错误等? – 2013-02-12 19:45:22

+0

我的不好......... – priehl 2013-02-12 19:48:52

回答

0

如果你看一下TradeCaptureReportRequest.set的C#代码,你会发现它会像QuickFix.NoDates型为NoDates值:

// line: 1993 
public void set(QuickFix.NoDates value) 
{ setField(value); } 

因此改变你的C#以下:

var nodates = new QuickFix.NoDates(); 
nodates.set(new QuickFix.TradeDate("20130201")); 
req.set(nodates); 

看起来你正在使用QuickFix .Net封装在C++上,这是.NET编程指南的憎恶。我强烈建议你切换到QuickFIX/N,这是不太可怕的(但仍然可怕)。

+0

显然我可以做这样的事情,去图... QuickFix44.TradeCaptureReportRequest.NoDates nodates = new QuickFix44.TradeCaptureReportRequest.NoDates(); nodates.set(new QuickFix.TradeDate(“20130211”)); req.addGroup(nodates); // 75 – priehl 2013-02-12 21:43:14