First output of calllib is always double.

3 次查看(过去 30 天)
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.

采纳的回答

Paras Gupta
Paras Gupta 2024-4-30
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.

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 C Shared Library Integration 的更多信息

标签

产品


版本

R2023b

Community Treasure Hunt

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

Start Hunting!

Translated by