First output of calllib is always double.

4 vues (au cours des 30 derniers jours)
Zachary Smoot
Zachary Smoot le 24 Avr 2024
If I have a function in a C library declared in a C header like so:
long long some_function();
And call the function like so:
loadlibrary('the_library', 'the_header.h');
out = calllib('the_library', 'some_function');
The output "out" is of type double, instead of int64.
When generating a prototype file for the library, the value of "LHS" is detected as "int64", but this does not seem to effect what the actuall output type is when calling the function.

Réponse acceptée

Paras Gupta
Paras Gupta le 30 Avr 2024
Hey Zachary,
In my understanding, you want the output type of the 'calllib()' function to be 'int64' instead of 'double' for a C function with return type "long long".
The type for all scalar values returned by MATLAB is 'double' by default. Please refer to the note given in the following documentation:
To convert the output to 'int64', you can try the following two workarounds:
  1. Using the 'int64()' function on the output - https://www.mathworks.com/help/matlab/ref/int64.html
  2. Modifying the function definition to return an array pointer with type "long long" instead of a scalar output. The 'out' variable in MATLAB will then be a 'libpointer' object - https://www.mathworks.com/help/matlab/ref/libpointer.html
Hope this helps.

Plus de réponses (0)

Catégories

En savoir plus sur Call C from MATLAB dans Help Center et File Exchange

Tags

Produits


Version

R2023b

Community Treasure Hunt

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

Start Hunting!

Translated by