Comment charger une dll c++ fichier dans Matlab
J'ai une dll C++ fichier qui utilise beaucoup d'autres c++ de la bibliothèque (IPP, Opencv +++) que j'ai besoin de charger dans matlab. Comment puis-je faire cela?
J'ai essayé la fonction loadlibrary et mex. Le chargement de la bibliothèque ne fonctionne pas.
Mex trouve le linux choses (indépendant de la plateforme de la bibliothèque) et tente de les inclure. Et cela ne fonctionne pas.
Quelqu'un a une bonne idées?
Ajouté C wrappers autour du code C++, et qui a fait la loadlib fonctions de travail.
OriginalL'auteur Rolf Anders | 2009-02-19
Vous devez vous connecter pour publier un commentaire.
loadlibrary devrait fonctionner. Je l'utilise tout le temps pour appeler des fonctions de dll écrite en C++, le C wrappers.
Quelles erreurs avez-vous lorsque vous essayez d'utiliser la fonction loadlibrary?
Assurez-vous que les fonctions exportées de la dll sont des fonctions C, pas du C++ fonctions. Si non, alors écrire C wrappers.
Plus d'infos sur exactement ce que vous faites lorsque vous utilisez la fonction loadlibrary serait utile.
OriginalL'auteur Dima
Comme mentionné par d'autres, vous devez d'abord l'enveloppe de votre bibliothèque C++ comme une bibliothèque C - mathworks conseille de ne pas utiliser de code C++ directement à mex (dlopening C++ de base directement est compliqué), peut-être que c'est encore vrai.
Votre description est assez floue, trop: qu'entendez-vous par "mex trouve le linux chose", mais qui ne fonctionne pas. En disant qu'il ne fonctionne pas n'est pas utile: les commandes et le message d'erreur.
OriginalL'auteur David Cournapeau
Vous pourriez aller pour le Java approche (depuis Matlab exécute sur un JRE et peut accéder à des objets Java/méthodes -- juste être conscient que le Matlab JRE n'est pas aussi à jour que la dernière JRE, celui que je suis en cours d'exécution utilise Java 1.5) et l'utilisation JNA pour accéder à votre DLL.
Ou, si vous avez écrit de niveau supérieur DLL, vous pourrait aller pour le COM/ActiveX approche.
J'ai eu un bon succès l'architecture de l'interface de mes fonctions C++ comme COM/ActiveX bibliothèques -- vous n'avez pas à s'embêter avec ça .h des trucs.
Voir le Interfaces Externes guide sur COM les clients, en particulier la partie sur gestion/conversion de données.
Il serait un travail supplémentaire pour ajouter COM/ActiveX couche, mais rendrait votre bibliothèque de plus de portable dans le monde Windows, et probablement plus facilement utilisé dans MATLAB.
Si vous avez beaucoup d'appels de fonction à votre fichier DLL, COM/ActiveX approche pourrait être plus rapide (pas sûr), mais sinon je pense que la JNA approche serait plus facile.
OriginalL'auteur Jason S