Вопрос

Я загрузил и построил 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 соответствуют целевой неуправляемой подписи.

MDA Ошибка MSDN.

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

Это было полезно?

Решение

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

Во-первых. это правильно?

Во-вторых, вы использовали проекты 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>

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top