Conversione QuantLib a QuantLib-SWIG C #
Domanda
Ho scaricato e costruito QuantLib (ricerca su Google per quantlib e controllo installare link) dal loro sito in Visual Studio 2010. Ma perché la mia conoscenza di C ++ è una specie di minimo Vorrei utilizzare SWIG così posso chiamare le librerie QuantLib con C #. Dopo la conversione SWIG ottengo una configurazione corretta. Ho pensato che questo sarebbe correre ma a tempo di esecuzione ottengo il seguente errore in più sedi nelle classi C #:
- PInvokeStackImbalance stato rilevato
-
Una chiamata alla funzione PInvoke 'NQuantLib! QuantLib.NQuantLibcPINVOKE :: new_Date__SWIG_1' ha sbilanciato la pila. Ciò è probabilmente perché la firma PInvoke gestito non corrisponde alla firma di destinazione non gestito. Controllare che la convenzione di chiamata e parametri della firma PInvoke corrispondono il bersaglio firma non gestito.
Credo che questo sia un errore generale quindi per favore fatemi sapere come risolvere questo problema?
Soluzione
Potrebbe essere una sorta di versione non corrispondente.
In primo luogo: dal momento che si sta utilizzando VC2010, presumo la versione di QuantLib e QuantLib-SWIG si sta utilizzando sono stati estratti da Subversion; è corretto?
In secondo luogo, ha utilizzato i progetti VC2010 inclusi nella cassa (quelli con _vc10 nel nome del file) sia per QuantLib e QuantLib-C #, o fatto si convertono altri progetti? Forse si compila sia in modalità di rilascio? E fare il C # esempi forniti da eseguire l'IDE se li dici di? (Sono i progetti EquityOption e BermudanSwaption)
Ultimo, quale versione di SWIG stai usando?
Altri suggerimenti
http://www.resolversystems.com/products/quantlib-binary/ per una versione pronta costruita di QuantLib per C #.
Sono stato installato e funzionante in pochi minuti.
le estensioni quantlib pagina per i dettagli sull'uso QuantLib in altre lingue e piattaforme.
Una soluzione temporanea sarebbe quello di creare un file di configurazione ( App.config ) nella soluzione QuantLib_vc10 e aggiungere un NetFx40_PInvokeStackResilience
elemento di sopprimere l'errore di stack sbilanciato.
Ho creato il seguente App.config file e si era caricato in questa BermudanSwaption_vc10 e EquityOption_vc10 progetti.
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<runtime>
<NetFx40_PInvokeStackResilience enabled="1"/>
</runtime>
</configuration>
Poi i due progetti funziona bene, anche se probabilmente con un certo costo in termini di prestazioni.