Я хотел бы добавить небольшую функцию в QuantLib и скомпилировать ее вместе с привязками SWIG для использования в проекте C # в Visual Studio 2010. Однако у меня возникают проблемы почти на каждом шагу. Какие шаги предпринимаются при создании QuantLib в Visual Studio 2010, создании привязок SWIG и создании проекта C #?
- Я скачал QuantLib с http://sourceforge.net/projects/quantlib/files/
- Я скачал Boost с http://sourceforge.net/projects/boost/files/boost/1.49.0/
- Я скачал привязки QuantLib + SWIG с http://sourceforge.net/projects/quantlib/files/QuantLib/1.0/bindings/QuantLib-SWIG-1.0.zip/download
- Я установил для переменной среды QL_DIR значение "C: \ pathToFolder \ QuantLib-1.2 \ lib" (компьютер> свойства> дополнительные параметры системы> дополнительные> переменные среды)
- Я запустил файл swig.cmd, расположенный в C: \ pathToFolder \ QuantLib-SWIG-1.0 \ CSharp
- Я открыл QuantLib_vc9.sln в Visual Studio 2010
- Для проекта NQuantLibc:
- Я включил свои каталоги Boost и QuantLib в каталоги заголовков.
- Я включил свой каталог QuantLib / lib в каталоги библиотеки.
- Я успешно построил проект NQuantLibc
- Для проекта NQuantLib_vc9:
- Я сделал это зависимым от проекта NQuantLibc.
- Я успешно создал проект NQuantLib_vc9.
- Для проекта EquityOption_vc9:
- Я сделал это зависимым от проекта NQuantLib_vc9.
- Я успешно создал проект EquityOption_vc9.
- Когда я пытаюсь запустить проект EquityOption_vc9, я получаю исключение TypeInitializationException: «Была предпринята попытка загрузить программу с неверным форматом.»
Вот полное исключение:
System.TypeInitializationException was unhandled
Message=The type initializer for 'QuantLib.NQuantLibcPINVOKE' threw an exception.
Source=NQuantLib
TypeName=QuantLib.NQuantLibcPINVOKE
StackTrace:
at QuantLib.NQuantLibcPINVOKE.new_Date__SWIG_1(Int32 jarg1, Int32 jarg2, Int32 jarg3)
at QuantLib.Date..ctor(Int32 d, Month m, Int32 y) in C:\Users\JRobinson\Desktop\QuantLib-SWIG-1.0\CSharp\csharp\Date.cs:line 48
at EquityOptionTest.EquityOption.Main(String[] args) in C:\Users\JRobinson\Desktop\QuantLib-SWIG-1.0\CSharp\examples\EquityOption.cs:line 43
at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
InnerException: System.TypeInitializationException
Message=The type initializer for 'SWIGExceptionHelper' threw an exception.
Source=NQuantLib
TypeName=SWIGExceptionHelper
StackTrace:
at QuantLib.NQuantLibcPINVOKE.SWIGExceptionHelper..ctor()
at QuantLib.NQuantLibcPINVOKE..cctor() in C:\Users\JRobinson\Desktop\QuantLib-SWIG-1.0\CSharp\csharp\NQuantLibcPINVOKE.cs:line 126
InnerException: System.BadImageFormatException
Message=An attempt was made to load a program with an incorrect format. (Exception from HRESULT: 0x8007000B)
Source=NQuantLib
StackTrace:
at [long string removed]
at QuantLib.NQuantLibcPINVOKE.SWIGExceptionHelper..cctor() in C:\Users\JRobinson\Desktop\QuantLib-SWIG-1.0\CSharp\csharp\NQuantLibcPINVOKE.cs:line 106
InnerException:
Обратите внимание, что я построил все с настройкой отладки. Я также попробовал это, используя конфигурацию выпуска. Это не сработало.
Хотелось бы найти полный набор инструкций, подробно описывающих, как создать проект такого типа. Я нашел некоторые инструкции здесь, Компиляция Quantlib через SWIG для C # , но я не смог заставить его работать.
Страница QuantLib содержит инструкции по созданию QuantLib в Visual Studio 2010, http://quantlib.org/install/vc10.shtml, но мне нужна помощь в создании привязок SWIG.
Resolver Systems имеет предварительно созданные привязки C #, которые работают для меня. http://www.resolversystems.com/products/quantlib-binary/ Мне удалось запустить код QuantLib в C # с этим пакетом. Моя проблема в том, что мне нужно добавить небольшую функцию в код QuantLib для использования в моем проекте на C #. Вот почему мне нужно пересобрать QuantLib и воссоздать привязки SWIG.
Я знаю о QLNet, C # -порте QuantLib, http://sourceforge.net/projects/qlnet/,, но в этом проекте отсутствуют некоторые фрагменты, и я думаю, что он больше не разрабатывается активно. В частности, мне нужно иметь возможность оценивать опционы, которые платят отдельные дивиденды. В QLNet отсутствует часть кода для этого. Я попытался перенести необходимый код из QuantLib в QLNet, но мой C ++ должен быть ржавым, потому что я получаю неправильный вывод.
Обратите внимание, что небольшая функция, которую мне нужно добавить в QuantLib, - это возможность обрабатывать дробные дни. Мне удалось добавить эту функцию в QLNet, и это действительно небольшая функция. Это крошечное редактирование задерживает мой проект. Я был бы очень признателен за помощь в этом вопросе.