QuickFix的.Net DLL包装器中的命名空间问题

时间:2013-02-12 17:10:50

标签: c# .net-4.0 quickfix

我正在使用.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.NoDates类中定义的QuickFix44.TradeCaptureReportRequest类。

然而,在NoDates namesapace中定义了一个QuickFix类,当我执行以下操作时,它会编译得很好。

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

我正在使用Quickfix v4.0.30128和.Net包装器来使用C ++ DLL。

1 个答案:

答案 0 :(得分: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,这不太可怕(但仍然看起来很糟糕)。