Преобразование QuantLib на Quantlib-Swig C #
Вопрос
Я загрузил и построил quantlib (поиск Google для contlib и check install link) с их веб-сайта в Visual Studio 2010. Но потому что мои знания C ++ являются минимальными, я хотел бы использовать Swig, поэтому я могу вызвать библиотеки Quantlib с C #. После преобразования Swig я получаю правильную сборку. Я думал, что это запустится, но во время выполнения я получаю следующую ошибку в нескольких местах в классах C #:
- Был обнаружен pinvokestackimbalance
Призыв к функции pinvoke 'nquantlib! Quantlib.nquantlibcpinvoke :: new_date__sswig_1' имел несбалансированный стек. Это, вероятно, поскольку управляемое подпись PinVoke не соответствует неуправляемой целевой подписи. Убедитесь, что Конвенция о вызове и параметры подписи PinVoke соответствуют целевой неуправляемой подписи.
Я думаю, что это общая ошибка, поэтому, пожалуйста, дайте мне знать, как это исправить?
Решение
Это может быть какой-то несоответствие версии.
Во-первых. это правильно?
Во-вторых, вы использовали проекты VC2010, включенные в оформление заказа (с _vc10 в имени файла) для Quantlib, так и Quantlib-C #, или вы преобразовали другие проекты? Вы скомпилировали как в режиме выпуска? И сделайте приведенные примеры C # с IDE, если вы его сообщете? (Это проекты по веществу и бермудансам)
Последнее, какая версия Swig вы используете?
Другие советы
Видеть http://www.resolversystems.com/products/quantlib-binary/ Для готовой встроенной версии Quantlib для C #.
Я был и бегал за несколько минут.
Пожалуйста, отправляйтесь в Страница расширений Quantlib Для получения подробной информации об использовании Quantlib под другими языками и платформами.
Временное исправление было бы создание файла конфигурации (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>
Тогда два проекта будут работать нормально, хотя, вероятно, с некоторыми затратами на производительность.