How to call an external function in F # with arguments by reference?

I am trying to pass C # dll-Call to F #.

C # call:

[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); 

I tried to write this in F # in half a dozen ways (at least!), But all to no avail. Among them:

 [<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); 

Or:

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

I tried writing byref with a qualifier or like "a: byref" - can someone please help me? Thank you so much in advance!

A temporarily upset scientist who just wants to get his formulas in :-)

+4
source share
1 answer

Try

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

The ad must more or less match the signature C.

EDIT:

As ildjarn noted,

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

could be better.

+5
source

Source: https://habr.com/ru/post/1436234/


All Articles