error in using calllib

32 次查看(过去 30 天)
Bency Baby
Bency Baby 2012-12-14
I am using Microsoft visual studio 2008 and MATLAB 7.11.0(R2010b) i want to use callib function but it shows me an error?
>> loadlibrary('t1.dll', 't1header.h')
>> calllib('t1','Add',2,3) ??? Error using ==> calllib Method was not found.
please help me
  1 个评论
Philip Borghesani
Philip Borghesani 2012-12-17
Do you recive any warnings when you load the library? What is the output of libfunctions t1? If you issue the command:
NotFound=loadlibrary('t1.dll', 't1header.h');
What is the content of NotFound?

请先登录,再进行评论。

回答(2 个)

Walter Roberson
Walter Roberson 2012-12-14
That could mean that Add was not found in the library.
In the code that defines Add, is that code C or C++ ? If it is C++, is it in a
extern "C"
section? If it is C++ and is not in an extern C section, then internally it would not be known by the name Add . (This is a deliberate design feature of C++ in order to prevent accidental calling of a C++ routine without a proper "this" object in place.)
  3 个评论
Walter Roberson
Walter Roberson 2012-12-17
I'm sure I answered this...
You are attempting to call upon a function named Add, passing to it two double numbers. Your routine defines a function named Add that accepts int numbers. You must match the type of parameter you are passing with the type of parameter the routine accepts.
Reminder, in MATLAB,
A = 2
defines A to be double, not integer. It is exactly the same as if you had used
A = 2.0000000;
or
A = 0.02E+2
Whereas
A = uint8(2)
would assign an 8 bit unsigned integer to A.
The number of bits in an "int" depends upon your C++ compiler.
Philip Borghesani
Philip Borghesani 2012-12-17
Calllib will automatically convert all simple data types for you. The types are not the problem. Matlab matrices are also automatically converted to native pointer types to a vector/matrix.

请先登录,再进行评论。


Philip Borghesani
Philip Borghesani 2012-12-17
Given the header and code you posted it looks like you are not exporting your function from the library. Read up on building a DLL with exported functions and the declspec compiler extension. Dependency walker can be used to verify that the function was correctly exported without name mangling.

类别

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

标签

产品

Community Treasure Hunt

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

Start Hunting!

Translated by