1

Visual Studio 2010のWebサイトからQuantLib(Googleでquantlibを検索し、インストールリンクを確認)をダウンロードしてビルドしました。ただし、C ++の知識が最小限であるため、SWIGを使用してC#でQuantLibライブラリを呼び出すことができます。SWIG変換後、適切なビルドを取得します。これは実行されると思いましたが、実行時にC#クラスの複数の場所で次のエラーが発生します。

PInvokeStackImbalanceが検出されました
PInvoke関数'NQuantLib!QuantLib.NQuantLibcPINVOKE :: new_Date__SWIG_1'の呼び出しにより、スタックのバランスが崩れました。これは、マネージドPInvokeシグニチャがアンマネージドターゲットシグニチャと一致しないことが原因である可能性があります。PInvokeシグニチャの呼び出し規約とパラメータがターゲットのアンマネージドシグニチャと一致することを確認してください。

MDAエラーMSDN

これは一般的なエラーだと思いますので、修正方法を教えてください。

4

4 に答える 4

1

C#用のQuantLibの既製バージョンについては、http://www.resolversystems.com/products/quantlib-binary/を参照してください。

私は数分で稼働しました。

于 2011-05-20T16:20:00.257 に答える
1

ある種のバージョンの不一致である可能性があります。

まず、VC2010を使用しているので、使用しているQuantLibとQuantLib-SWIGのバージョンがSubversionからチェックアウトされていると思います。これは正しいです?

次に、チェックアウトに含まれているVC2010プロジェクト(ファイル名に_vc10が含まれているプロジェクト)をQuantLibとQuantLib-C#の両方に使用しましたか、それとも他のプロジェクトを変換しましたか?両方をリリースモードでコンパイルしましたか?また、提供されているC#の例は、指示した場合にIDEから実行されますか?(これらはEquityOptionおよびBermudanSwaptionプロジェクトです)

最後に、どのバージョンのSWIGを使用していますか?

于 2010-12-13T11:12:26.970 に答える
1

他の言語やプラットフォームでのQuantLibの使用の詳細については、quantlib拡張機能のページにアクセスしてください。

于 2012-01-10T05:55:54.467 に答える
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>

そうすれば、2つのプロジェクトは正常に機能しますが、おそらくパフォーマンスにいくらかのコストがかかります。

于 2012-02-12T06:10:27.033 に答える