I am using a compiled C DLL library to compute various astronomical functions, for example time since epoch and ra/dec to az/el conversions. I figured out how to call these functions from Python, but Matlab is another matter. The call is of this form:
time_since_1950 = TimeFunc.TimeComps(c_int(year), c_int(dayOfYear), c_int(hour), c_int(minute), c_double(seconds));
Astro.RaDecToAzEl(c_double(time_since_1950), c_double(float(lat)), c_double(float(lon)), ...
c_double(RA), c_double(dec), byref(az), byref(el));
There are several issues here:
  1. Dot indexing is not supported for function calls
  2. c_int and c_double typecasting are not supported. Can I just replace these with Matlab int32 and double?
  3. RaDecToAzEl returns az and el by reference. I don't know how to make this work.
I have already defined my Matlab input arguments as int32 and double, as appropriate.
Is there a way to make this work with the existing C libraries?

2 Kommentare

dpb
dpb am 21 Feb. 2023
I wonder if the following will be of any use ... <cpp-interface>
Kurt
Kurt am 21 Feb. 2023
I'll take a look. Thanks

Melden Sie sich an, um zu kommentieren.

 Akzeptierte Antwort

Kurt
Kurt am 23 Feb. 2023

0 Stimmen

The solution was to first load my Dynamic Link Libraries (DLLs).
Then the Matlab calls to my library functions look like this:
time_since_1950 = calllib('TimeFunc','TimeComps', year, dayOfYear, hour, minute, seconds);
azPtr = libpointer('doublePtr', az);
elPtr = libpointer('doublePtr', el);
calllib('Astro','RaDecToAzEl',time_since_1950, lat, lon, RA, dec, azPtr, elPtr);
az = azPtr.Value;
el = elPtr.Value;
Turns out, Matlab really CAN work with pointers to and from C code.

Weitere Antworten (0)

Kategorien

Mehr zu Write C Functions Callable from MATLAB (MEX Files) finden Sie in Hilfe-Center und File Exchange

Produkte

Version

R2022b

Gefragt:

am 21 Feb. 2023

Beantwortet:

am 23 Feb. 2023

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by