Frage

Ich habe heruntergeladen und QuantLib gebaut (Suche nach quantlib Google und überprüfen Link installieren) von ihrer Website in Visual Studio 2010. Aber weil meine Kenntnisse in C ++ Art minimal ist, würde Ich mag SWIG verwenden, so dass ich die QuantLib Bibliotheken aufrufen mit C #. Nach der SWIG Umwandlung erhalte ich eine richtige Build. Ich dachte, das laufen würde zur Laufzeit, aber ich bekomme die folgende Fehlermeldung an mehreren Standorten in dem C # -Klassen:

PInvokeStackImbalance wurde erkannt
Ein Aufruf von PInvoke Funktion 'NQuantLib! QuantLib.NQuantLibcPINVOKE :: new_Date__SWIG_1' hat den Stapel unausgewogen. Dies ist wahrscheinlich, weil die verwaltete PInvoke Signatur nicht mit der nicht verwalteten Zielsignatur. Überprüfen Sie, ob die Aufrufkonvention und die Parameter der PInvoke Signatur das Ziel nicht verwalteten Signatur entsprechen.

MDA Fehler MSDN

Ich denke, dass dies ein allgemeiner Fehler ist, so lassen Sie es mich wissen, wie dieses Problem beheben?

War es hilfreich?

Lösung

Es könnte eine Art Versionskonflikt sein.

Erstens: da Sie VC2010 verwenden, gehe ich davon aus, die Version von QuantLib und QuantLib-SWIG Sie verwenden von Subversion ausgecheckt; ist das richtig?

Zweitens haben Sie verwendet die VC2010 Projekte in der Kasse enthalten (die mit _vc10 im Dateinamen) für beide QuantLib und QuantLib-C #, oder haben Sie konvertieren andere Projekte? Haben Sie beide in Release-Modus kompilieren? Und laufen die bereitgestellten C # Beispiele aus der IDE, wenn Sie ihnen sagen? (Sie sind die EquityOption und BermudanSwaption Projekte)

Last, welche Version von SWIG verwenden Sie?

Andere Tipps

Siehe http://www.resolversystems.com/products/quantlib-binary/ für eine fertig gebaute Version von QuantLib für C #.

Ich war und in wenigen Minuten.

head Bitte der quantlib Erweiterungen Informationen zur Verwendung QuantLib unter anderen Sprachen und Plattformen.

Eine temporäre Lösung wäre eine Konfigurationsdatei zu erstellen ( App.config ) in der QuantLib_vc10 Lösung und fügen Sie ein NetFx40_PInvokeStackResilience Element des unsymmetrischen Stapelfehler zu unterdrücken.

Ich habe die folgende App.config Datei und hatte diese geladen in die BermudanSwaption_vc10 und EquityOption_vc10 Projekte.

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

Dann werden die beiden Projekte werden gut funktionieren, wenn auch wahrscheinlich mit einigen Kosten der Leistung.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top