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

本文关键字:Net 问题 DLL 包装 命名空间 QuickFix | 更新日期: 2023-09-27 17:58:46

我正在与.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类。

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

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

我使用的是Quickfixv4.0.30128和C++DLL的.Net包装器。

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

如果您查看TradeCaptureReportRequest.set的C#代码,您会发现它想要NoDates值的QuickFix.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,它不那么可怕(但看起来仍然很糟糕)