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包装器。
如果您查看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,它不那么可怕(但看起来仍然很糟糕)