我已经在Visual Studio 2010中的网站上下载并构建了Quantlib(搜索Google搜索Quantlib并检查安装链接)。但是,由于我对C ++的了解很小,所以我想使用SWIG,以便我可以将Quantlib库与C#调用。转换后,我得到了适当的构建。我认为这将运行,但是在运行时我会在C#类中的多个位置收到以下错误:

检测到pinvokestackimbalance
呼叫pinvoke函数'nquantlib!Quantlib.nquantlibcpinvoke :: new_date__swig_1'堆栈不平衡。这可能是因为托管PinVoke签名与非托管目标签名不符。检查PINVOKE签名的调用约定和参数是否与目标不受管理的签名相匹配。

MDA错误MSDN

我认为这是一个普遍的错误,所以请让我知道如何解决这个问题?

有帮助吗?

解决方案

这可能是某种版本不匹配。

首先:由于您正在使用VC2010,因此我假设您正在使用的Quantlib和Quantlib-Swig的版本是从Subversion中检查出来的;这个对吗?

其次,您是否使用了Quantlib和Quantlib-C#中的结帐中包含的VC2010项目(文件名中的_vc10),还是转换了其他项目?您是否在发布模式下编译了这两个?如果您告诉他们,提供的C#示例是否从IDE运行? (它们是股票和百慕大华人项目)

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

其他提示

http://www.resolversystems.com/products/quantlib-binary/ 对于QU#的Quantlib的现成版本。

我在几分钟后开始跑步。

请前往 Quantlib扩展页面 有关在其他语言和平台下使用QuantLib的详细信息。

临时修复将是创建一个配置文件(app.config) 在里面 QUANTLIB_VC10 解决方案并添加一个 NetFx40_PInvokeStackResilience 元素抑制不平衡的堆栈错误。

我创建了以下 app.config 文件并将其加载到 BermudansWaption_VC10EquityOption_VC10 项目。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <runtime>
        <NetFx40_PInvokeStackResilience enabled="1"/>
    </runtime>
</configuration>

然后,这两个项目可以正常工作,尽管性能成本可能会成本。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top