Преобразование QuantLib в QuantLib-SWIG C # - PullRequest
1 голос
/ 12 декабря 2010

Я скачал и собрал QuantLib (поищите в Google Quantum и проверьте ссылку установки) с их сайта в Visual Studio 2010. Но поскольку мои знания C ++ минимальны, я бы хотел использовать SWIG, чтобы я мог вызывать библиотеки QuantLib. с C #. После преобразования SWIG я получаю правильную сборку. Я думал, что это будет работать, но во время выполнения я получаю следующую ошибку в нескольких местах в классах C #:

Обнаружен дисбаланс PInvokeStack
При вызове функции PInvoke 'NQuantLib! QuantLib.NQuantLibcPINVOKE :: new_Date__SWIG_1' разбалансирован стек. Это вероятно потому, что управляемая подпись PInvoke не совпадает с неуправляемой целевой подписью. Убедитесь, что соглашение о вызовах и параметры подписи PInvoke соответствуют целевой неуправляемой подписи.

Ошибка MDA MSDN

Я думаю, что это общая ошибка, поэтому, пожалуйста, дайте мне знать, как это исправить?

Ответы [ 4 ]

1 голос
/ 20 мая 2011

См. http://www.resolversystems.com/products/quantlib-binary/ для готовой версии QuantLib для C #.

Я был запущен через несколько минут.

1 голос
/ 10 января 2012

Пожалуйста, перейдите на страницу расширений Quantlib для получения подробной информации об использовании QuantLib на других языках и платформах.

1 голос
/ 13 декабря 2010

Это может быть какое-то несовпадение версий.

Во-первых: поскольку вы используете VC2010, я предполагаю, что используемая вами версия QuantLib и QuantLib-SWIG извлечены из Subversion;это правильно?

Во-вторых, вы использовали проекты VC2010, включенные в оформление заказа (проекты с _vc10 в имени файла) для QuantLib и QuantLib-C #, или вы конвертировали другие проекты?Вы скомпилировали оба в режиме Release?И запускаются ли предоставленные примеры C # из IDE, если вы им это скажете?(Это проекты EquityOption и BermudanSwaption)

Наконец, какую версию SWIG вы используете?

0 голосов
/ 12 февраля 2012

Временным исправлением будет создание файла конфигурации ( App.config ) в решении QuantLib_vc10 и добавление элемента NetFx40_PInvokeStackResilience для подавления несбалансированная ошибка стека.

Я создал следующий файл App.config и загрузил его в проекты BermudanSwaption_vc10 и EquityOption_vc10 .

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

Тогда оба проекта будут работать нормально, хотя, возможно, с некоторыми затратами на производительность.

...