Effacer les filtres
Effacer les filtres

C Dll does not find all header paths

5 vues (au cours des 30 derniers jours)
Peter Foerster
Peter Foerster le 1 Oct 2018

Hello all,

I am currently trying to call functions from a dll from within MATLAB. Here are two things that I tried and have questions about:

1.:

calllib("C:\Windows\System32\mxsvcb.dll",'mxCardsReset',0)

This is the way I am used to calling Dlls (from LabVIEW): reference the dll, select a function and pass the parameters. However, when I call this, I get an error back: Error using calllib Library was not found

The file is definitely at that location. Is this sort of call possible?

2.: When I go to the documentation folder and call

loadlibrary('C:\Windows\System32\mxsvcb.dll','\apimx\apimx.h')

I get a different error, that tells me the file that is being referenced by an include does not exist "common/nowarn.h". Now, that file is in a parallel folder and not in a subfolder to the "apimx.h", so the path would be "../../common/nowarn.h" from where apimx is.

Because of this, I copied the folder into the "apimx" folder and got the same message for the next include in line. Since the header files reference each other, I can't rearrange everything, because it would take a long time. Is there a way to make MATLAB understand the structure better?

Edit: Sorry, somehow the post got submitted while adding tags.

  3 commentaires
Dennis
Dennis le 2 Oct 2018
Which version of matlab are you using and are your .dll 32 or 64 bit?
Peter Foerster
Peter Foerster le 3 Oct 2018
It's a 32 Bit dll on MATLAB R2018b 64-Bit, but for now, I don't believe that to be the issue, since the error message clearly indicate some issues with referencing the header files. (I'd expect to be able to call 32 bit dlls from 64 bit MATLAB anyway)

Connectez-vous pour commenter.

Réponse acceptée

Guillaume
Guillaume le 2 Oct 2018
Modifié(e) : Guillaume le 2 Oct 2018
You cannot use calllib in matlab unless you have first loaded the library with loadlibrary.
If there is a bunch of include file that are not found because they're in a different folder then you need to tell loadlibrary where to find them, using the includepath option (Not that this is orthogonal to addpath which is for m files). From your description, it looks like includepath should point to whatever ../.. is, so
loadlibrary('C:\Windows\System32\mxsvcb.dll','\apimx\apimx.h', 'includepath', '\apimx\..\..\')
may work.
  1 commentaire
Peter Foerster
Peter Foerster le 3 Oct 2018
Hi Guillaume,
thanks for your answer! Just to clarify a few things: when I write .. I mean out one folder. Also, if the option is inlcudepath and not addpath, why are they using addpath in the loadlibrary example?
I have tried your suggestion, but it still gives me the same error as without the 'includepath'. It is telling me no such file or directory #include common/nowarn.h, regardless of how I put in the path:
loadlibrary('C:\Windows\System32\mxsvcb.dll','\apimx\apimx.h','includepath', 'c:\Program Files\MAX Technologies\maxapi\common\')
loadlibrary('C:\Windows\System32\mxsvcb.dll','\apimx\apimx.h','includepath', '\common\')
loadlibrary('C:\Windows\System32\mxsvcb.dll','\apimx\apimx.h','includepath', '\..\common\')
It doesn't appear to be searching the includepath at all, because the actual call for common/nowarn.h comes from another header file that is referenced in apimx.h. Is there any way to do this without header file?

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Search Path dans Help Center et File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by