4

C# dll-Call を F# に移植しようとしています。

C# 呼び出しは次のとおりです。

[DllImport("swedll32.dll", CharSet = CharSet.Ansi, EntryPoint = "swe_revjul")]
private extern static double ext_swe_revjul(double tjd, int gregflag, ref int year, ref int month, ref int day, ref double hour);

これを F# で 6 つの方法 (少なくとも!) で記述しようとしましたが、すべて役に立ちませんでした。その中で:

[<DllImport("swedll32.dll", CharSet = CharSet.Ansi, EntryPoint = "swe_revjul")>]
extern double ext_swe_revjul (double tjd ) (gregflag:int) (year: int byref) (month: int byref) (day: int byref) (hour: double byref);

または:

let ext_swe_revjul double (tjd:double) (gregflag:int) (year: int byref) (month: int byref) (day: int byref) (hour: double byref )

修飾子を使用して、または「a:byref」として byref を記述しようとしました - 誰か助けてもらえますか? 事前にどうもありがとうございました!

数式を取得したいだけの一時的に欲求不満の科学者:-)

4

1 に答える 1

6

試す

extern static double ext_swe_revjul(double tjd, int gregflag, int* year, int* month, int* day, double* hour)

宣言は、C シグネチャとほぼ一致する必要があります。

編集:

ildjarn が指摘したように、

extern static double ext_swe_revjul(double tjd, int gregflag, int& year, int& month, int& day, double& hour)

良いかもしれません。

于 2012-09-25T21:09:05.553 に答える