【问题标题】:Compiling Quantlib via SWIG for C#通过 SWIG 为 C# 编译 Quantlib
【发布时间】:2010-07-26 10:32:24
【问题描述】:

有人有使用SWIG 的经验吗?我目前正在研究QuantLib,发现可以使用 SWIG 生成 C# 代码。我们正在探索使用 QuantLib 和专有的封闭源代码库(可能会以 .Net dll 的形式提供)创建财务函数组合库的选项。这个想法是将这两者结合起来创建一个统一的超级库。我见过.Net port of QuantLib,但它似乎没有得到积极维护(并且不完全确定实际移植了多少),所以我避免了它。

第 1 步是评估生成可在“任何地方”使用的库的难度,即 MS 办公应用程序(通过 VBA)、控制台应用程序以及服务器端(例如 Web 应用程序)。我认为这涉及 COM 互操作,但我不知道从哪里开始,或者我是否走在正确的轨道上。

我没有使用 C++ 的经验;和 COM 是我已经忽略的东西(目前对我来说是一个流行词)。我知道与此主题相关的相关 MSDN 文章。

我正在寻求以下方面的帮助:

  1. 是否有在 C# 中使用 QuantLib 的替代方法?
  2. 关于我的开发环境,我需要什么?
  3. 有人知道通过 SWIG 编译的即用型 QuantLib C# 库吗? (一等奖 = 我的工作量减少了)

任何帮助表示赞赏?

编辑:除非有更好的答案,否则我已接受我的答案为正确答案。

【问题讨论】:

    标签: c# c++ com-interop swig quantlib


    【解决方案1】:

    因此,SWIG 的 C# 绑定似乎可用。需要浏览SVN repository or list of files on SouceForge 才能找到它们。

    SWIG 文件夹包含几个子文件夹,具体取决于您选择的语言,在我的情况下,C# 是我感兴趣的那个。您需要先下载 SWIG 并将其可执行到系统 PATH 变量中。

    请务必阅读Readme.txt,因为它包含有关同样需要创建的QL_DIR 环境变量的详细信息。

    这可能是 VS Express 的限制 - 但解决方案文件包含 C# 项目和 C++ 项目,其中只有 C# 或 C++ 部分可以随时打开。我的建议是为 C++ 和 C# 项目创建单独的解决方案文件。

    来自 .Net 背景、lib 文件、obj 文件以及与 c++ 相关的所有其他爵士乐需要一些时间来适应。

    获得工作 C# 库所采取的步骤

    1. 按照here 的说明下载 QuantLib 和 Boost
    2. 下载QuantLib-SWIG folder from SourceForge的tar包。 编辑:主页上有一个download of the zip。它列在子文件夹中。查看Bindings下的v1.0文件夹
    3. 运行位于QuantLib-SWIG\CSharp 文件夹中的swig.cmd 文件(您需要先下载 SWIG() --> 这会为 Quantlib 生成 cs 包装文件。
    4. 构建 c++ 项目NQuantLibc - 注意此处创建的 dll 需要始终与 NQuantlib C# 构建的 dll 一起提供。它需要放置在DLLImport 属性可读的位置。 (有关位置列表,请参阅Dynamic-Link Library Search Order on 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 error。我正在使用 VS2010 中最新的 QuantLib/Boost 库。
    • 首先,AFAIK VS2010 还不能用于编译 Quantlib - 它目前正在工作但尚未准备好。使用 VS2008 或更低版本。 VS Express 版本运行良好。查看有关 dll 位置的更新
    • 我认为其中一些 cmets 已经过时了。我可以用 VS2010 成功构建 Quantlib。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-16
    相关资源
    最近更新 更多