将QuantLib转换为QuantLib SWIG C#

将QuantLib转换为QuantLib SWIG C#,c#,c++,swig,quantlib,C#,C++,Swig,Quantlib,我已经从他们在VisualStudio2010中的网站下载并构建了QuantLib(在谷歌上搜索QuantLib并检查安装链接)。但是因为我对C++的了解有点少,所以我想使用SWIG,这样我就可以用C语言调用QuantLib库。在SWIG转换之后,我得到了一个正确的构建。我以为这会运行,但在运行时,我在C#类的多个位置上遇到以下错误: 检测到PinvokesTack不平衡 调用PInvoke函数'nQuentLib!QuantLib.nQuentLibcInvoke::new_Date__SWI

我已经从他们在VisualStudio2010中的网站下载并构建了QuantLib(在谷歌上搜索QuantLib并检查安装链接)。但是因为我对C++的了解有点少,所以我想使用SWIG,这样我就可以用C语言调用QuantLib库。在SWIG转换之后,我得到了一个正确的构建。我以为这会运行,但在运行时,我在C#类的多个位置上遇到以下错误:

检测到PinvokesTack不平衡 调用PInvoke函数'nQuentLib!QuantLib.nQuentLibcInvoke::new_Date__SWIG_1'使堆栈不平衡。这可能是因为托管PInvoke签名与非托管目标签名不匹配。检查PInvoke签名的调用约定和参数是否与目标非托管签名匹配。


我认为这是一个一般性错误,请告诉我如何修复此错误?

可能是某种版本不匹配

第一:由于您使用的是VC2010,我假设您使用的QuantLib和QuantLib SWIG的版本是从Subversion签出的;这是正确的吗

其次,您是否对QuantLib和QuantLib-C使用了签出中包含的VC2010项目(文件名中带有vc10的项目),还是转换了其他项目?您是否在发布模式下编译了这两个文件?如果你告诉他们,提供的C#示例是否从IDE运行?(它们是EquityOption和百慕大群岛项目)

最后,您使用的是什么版本的SWIG?

请参阅QuantLib for C#的现成版本


几分钟后我就启动并运行了。

请转到,以了解在其他语言和平台下使用QuantLib的详细信息。

临时解决方案是在QuantLib_vc10解决方案中创建一个配置文件(App.config),并添加一个元素以抑制不平衡堆栈错误

我创建了以下App.config文件,并将其加载到百慕大群岛选项和EquityOption项目中



然后这两个项目将很好地工作,尽管可能会有一些性能成本。

Hi Luigi。谢谢你的回答。我正在使用12月10日的SVN QuantLib修订版和boost 1.44。我遵循了您的所有步骤,并在发布模式下构建了C#解决方案。现在,当在示例项目中运行构建时,它不会在运行时崩溃。然而,我不明白,当我在发布模式下运行附带调试器的示例时,仍然会抛出PinvokesTack。这有关系吗?或者我可以从调试器异常列表中删除PinVokeStack异常而不查看它吗?也许QuantLib还有一个缺点,因为它还没有完全转换成VS2010?我明白了。如果这是调用约定的问题,恐怕我们在QuantLib中做不了什么,因为调用是在SWIG生成的代码中进行的。同时,如果上面链接中的最后一个建议有效(关于的建议),请将修补过的项目发送给我,我将在下一版本中添加更改。(如果你这样做,请先查看最新版本,这样差异会更干净。)嗨,我会看看它,如果它有效,我会发送项目。谢谢你提供的信息。@BigChief,你有没有遇到过这种例外?我遇到了同样的问题,在那里我得到了“Pinvokestacks抛出”,我似乎找不到任何关于如何解决它的信息?(除了被埋在MSDN的深处,我不知道发生了什么…)