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 cannot be convert to a NoDates”

这让我大吃一惊,因为当我导航到 QuickFix dll 中 TradeCaptureRequest 的元数据时,我看到了这个。

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

如果我转到 NoDates 的定义,它会将我发送到QuickFix44.TradeCaptureReportRequest.NoDates类中定义的QuickFix44.TradeCaptureReportRequest类。

但是在命名空间中NoDates定义了一个类QuickFix,当我执行以下操作时它编译得很好。

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

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

4

1 回答 1

0

如果您查看 C# 代码,TradeCaptureReportRequest.set您会发现它需要一个值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);

您似乎在 C++ 上使用 QuickFix .Net 包装器,这是对 .Net 编程准则的厌恶。我强烈建议您切换到QuickFIX/N,它不那么可怕(但看起来仍然很糟糕)。

于 2013-02-12T19:56:50.327 回答