2010-12-12 3 views
1

Visual Studio 2010의 웹 사이트에서 QuantLib (quantlib 용 Google 검색 및 설치 링크 검색)을 다운로드하여 작성했습니다. 그러나 C++에 대한 지식이 부족하기 때문에 SWIG 그래서 저는 C#으로 QuantLib 라이브러리를 호출 할 수 있습니다. SWIG 변환 후 적절한 빌드를 얻습니다. 나는이 실행 것이라고 생각하지만, 런타임에 I는 C# 클래스에서 여러 위치에 다음과 같은 오류가 발생합니다 : '! NQuantLib QuantLib.NQuantLibcPINVOKE :: new_Date__SWIG_1가' QuantLib을 QuantLib-SWIG로 변환 C#

PInvokeStackImbalance이
의 PInvoke 함수에 대한 호출을 감지했다

불균형이 스택 관리되는 PInvoke 서명이 관리되지 않는 대상 서명과 일치하지 않기 때문일 수 있습니다. PInvoke 서명의 호출 규칙 및 매개 변수가 대상 관리되지 않는 시그니처와 일치하는지 확인하십시오.

MDA Error MSDN

나는 이것이 일반적인 오류가 그래서 내가이 문제를 해결하는 방법을 알려 주시기 바랍니다이라고 생각?

+4

http://stackoverflow.com/questions/3334011/compiling-quantions-quantlib-via-swig-for-c –

답변

1

버전 불일치 일 수 있습니다.

첫 번째 : VC2010을 사용하고 있으므로 사용중인 QuantLib 및 QuantLib-SWIG 버전이 Subversion에서 체크 아웃 된 것으로 가정합니다. 이 올바른지?

둘째, QuantLib과 QuantLib-C#에 대해 체크 아웃에 포함 된 VC2010 프로젝트 (파일 이름에 _vc10이있는 프로젝트)를 사용 했습니까? 아니면 다른 프로젝트로 변환 했습니까? 릴리스 모드에서 둘 다 컴파일 했습니까? 그리고 제공된 C# 예제는 IDE에서 실행합니까? (그들은 EquityOption 및 BermudanSwaption 프로젝트입니다.)

마지막으로 사용중인 SWIG 버전은 무엇입니까?

+0

안녕 Luigi. 귀하의 답변에 감사드립니다. 나는 12 월 10 일부터 SVN QuantLib 리비전을 1.44 향상 시켰습니다. 나는 모든 단계를 밟았고 릴리스 모드에서 C# 솔루션을 구축하는 것이 트릭을 만들었습니다. 이제 예제 프로젝트에서 빌드를 실행할 때 런타임에 크래시가 발생하지 않습니다. 그러나 디버거가 부착 된 릴리스 모드에서 예제를 실행할 때 여전히 PInvokeStackImbalance가 발생한다는 것을 이해하지 못합니다.이 문제가 있습니까 아니면 그것을 그냥 보지 않고 디버거 예외 목록에서 PInvokeStackImbalance 예외를 제거 할 수 있습니까? – BigChief

+0

http://www.go4answers.com/Example/pinvokestackimbalance-exception-126037.aspx QuantLib의 단점은 아직 완전히 VS2010으로 변환되지 않았기 때문일 수 있습니다. – BigChief

+0

알겠습니다. 그것이 규칙을 호출하는 문제라면, 호출이 SWIG 생성 코드에 있기 때문에 QuantLib 내에서 할 수있는 일은 거의 없습니다. 그 동안에, 위의 링크 (NetFx40_PInvokeStackResilience>에 관한 것)의 마지막 제안이 패치 된 프로젝트를 보내면 다음 릴리스에 변경 사항을 추가 할 것입니다. (당신이 그렇게한다면, 최신 버전을 먼저 확인해주세요. 그러면 diffs가 더 깨끗해집니다.) –

0

임시 고정은 QuantLib_vc10 용액의 구성 파일 (의 App.config)를 생성하고, 불평형 스택 오류를 억제하는 NetFx40_PInvokeStackResilience 요소를 추가하는 것이다.

나는 다음과 같은 의 App.config 파일을 생성하고 이것이 BermudanSwaption_vc10 EquityOption_vc10 프로젝트에로드했다.

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

그러면 두 가지 프로젝트가 제대로 작동하지만 성능에는 약간의 비용이들 것입니다.