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.

errore MDA MSDN

Credo che questo sia un errore generale quindi per favore fatemi sapere come risolvere questo problema?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top