通过SWIG为C#编译Quantlib

6
有人使用 SWIG 吗?我正在研究 QuantLib,看到可以使用 SWIG 生成 C# 代码。我们正在探索使用 QuantLib 和专有的闭源库(可能会作为 .Net dlls 提供)创建金融功能组合库的选项。目的是将它们结合起来创建一个统一的超级库。我看过QuantLib .Net 端口,但似乎它没有得到积极维护(也不确定实际移植了多少),所以我避免使用它。
第一步是评估生成可在任何地方使用的库的难度,例如 MS Office 应用程序(通过 VBA)、控制台应用程序以及服务器端(例如 Web 应用程序)。我假设这涉及 COM 互操作,但我不知道从哪里开始,甚至不确定我是否正确。
我没有使用 C++ 的经验;COM 是我目前眼花缭乱的词汇。我知道与此主题相关的 MSDN 文章。
我需要以下方面的帮助:
  1. 在C#中是否有使用QuantLib的替代方法?
  2. 关于我的开发环境,我需要什么?
  3. 是否有人知道通过SWIG编译的现成QuantLib C#库?(第一名=少做些工作)
任何帮助都将不胜感激。 编辑:除非提供更好的答案,否则我已接受我的答案为正确答案。
1个回答

9
看起来,SWIG的C#绑定是可用的。需要浏览 SVN存储库或SouceForge上的文件列表才能找到它们。
SWIG文件夹包含几个子文件夹,取决于您选择的语言,在我的情况下,我对C#感兴趣。您需要先下载SWIG并将可执行文件添加到系统PATH变量中。
确保阅读Readme.txt,因为它包含有关还需要创建的QL_DIR环境变量的详细信息。
这可能是VS Express的限制-但解决方案文件包含C#项目和C++项目,其中只能打开C#或C++部分之一。我的建议是为C++和C#项目创建单独的解决方案文件。
从.Net背景出发,lib文件、obj文件以及与c++相关的所有其他东西需要一些时间来适应。
获取工作中的C#库所采取的步骤
  1. 按照这里的说明下载QuantLib和Boost
  2. 从SourceForge下载QuantLib-SWIG文件夹的tar包编辑:主页上有zip下载可用。它列在子文件夹中。检查Bindings下的v1.0文件夹。
  3. 运行位于QuantLib-SWIG\CSharp文件夹中的swig.cmd文件(您需要先下载SWIG)--> 这将为Quantlib生成cs包装文件。
  4. 编译c ++项目NQuantLibc - 请注意,此处创建的dll必须始终与NQuantlib C#构建的dll一起发布。它需要放置在DLLImport属性可读取的位置。(有关位置列表,请参见MSDN上的动态链接库搜索顺序
  5. 构建C#项目NQuantLib
关于我的开发环境,我需要什么?
目前的QuantLib版本似乎只能在VS 2008上构建。VS 2010已经有一些更改,会导致编译出现问题。C#项目可以正常构建,但是请记得将目标框架从v4更改为v3.5以降低版本。
注意:在撰写本文时,C++ SWIG项目源文件中的QL_HEX_VERSION编号存在问题。运行swig.cmd后,打开VS项目,并将quantlib_wrap.cpp的第344行更改为...
#if QL_HEX_VERSION < 0x010001f0//0x010100f0

我已经给项目作者发送了电子邮件,正在等待反馈。编辑: Luigi正确地告诉我,这是与SVN中的代码有关的问题(我使用了它)。他建议使用QuantLib-SWIG-1.0.zip绑定。

Quantlib也可以在VC++ 2010上构建最新版本。


嗨,Ahmad,你能解释一下“它需要放置在DLLImport属性可读取的位置”是什么意思吗?我按照你说的做了一切,但在运行时,我在C#类中的多个位置遇到了[pInvokeStackImbalance错误](http://msdn.microsoft.com/en-us/library/0htdy0k3.aspx)。我正在使用最新的QuantLib / Boost库在VS2010中。 - BigChief
首先,据我所知,目前还不能使用VS2010编译Quantlib - 目前正在进行开发,但尚未准备好。请使用VS2008或更低版本。VS Express版本完全可以正常使用。请参阅有关dll位置的更新。 - Ahmad
以下线程也可能有用:http://thread.gmane.org/gmane.comp.finance.quantlib.user/8238 - Ahmad
我认为这些评论中有一些已经过时了。我可以成功地在VS2010上构建Quantlib。 - Francois Botha

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接