2016-04-29 1 views
2

Utilisation de Matlab Compiler SDK Je peux déployer mon code Matlab dans une DLL pouvant être chargée dans une application C#. Maintenant, je voudrais également ajouter une référence .NET dans mon code Matlab en utilisant la commande matlab NET.addAssembly. Si j'exécute mon code dans Matlab, je peux accéder à la méthode de la classe que j'ai importée. Malheureusement, si je compile mon code Matlab (avec la référence .net ajoutée) pour avoir ma DLL habituelle, il semble que les méthodes de la classe .net que j'ai importées dans mon code matlab ne puissent plus être vues (matlab renvoie une erreur "Non méthode appropriée, propriété ou champ 'MyMethodName' pour la classe 'MyNameSpace.MyClass' ". PS: Cela peut sembler bizarre d'avoir un projet .NETImpossible d'utiliser les méthodes .NET dans le fichier matlab dll déployé

PS: Cela peut sembler bizarre d'avoir un projet .NET cela fait référence à une DLL compilée par Matlab qui fait référence à un autre C# dll La raison est que je dois convertir tout mon (grand) projet Matlab en aC# et je voudrais le faire par étape mais sans affecter l'application principale (C#)

+1

J'effectue une opération de même type (appel des assemblys .net faits maison à partir du code MATLAB, puis compile ce dernier) sans problèmes. Êtes-vous sûr d'avoir ajouté tous les fichiers d'assemblage au processus de compilation ('-a' dans les options du compilateur matlab) et que ce sont les derniers compilés? Très probablement que si vous pouvez instancier l'objet et que la méthode n'est pas trouvée, c'est que ce n'est pas le dernier assemblage compilé qui est lié au code matlab compilé. – CitizenInsane

+0

@CitizenInsane D'après ce que j'ai compris de la documentation de Matlab, -une option n'est requise que pour les fichiers qui ne peuvent pas être localisés automatiquement par la fonction d'analyse des dépendances ('depfun'). En particulier, toutes les dépendances des fichiers MEX, des DLL ou des bibliothèques partagées doivent être ajoutées à l'aide de l'option -a. Cependant, ma DLL n'a aucune dépendance, donc je n'ai pas besoin d'ajouter une option -a. Puisque 'NET.AddAssembly' a besoin du chemin absolu vers la DLL j'ai juste besoin d'avoir la DLL au même endroit aussi sur le PC de production. En fait, la cause de l'erreur était différente (voir ma solution). – Homer1982

+0

@CitizenInsane Etes-vous également capable de joindre au processus de l'application principale afin de déboguer vos assemblages .net "faits maison"? – Homer1982

Répondre

1

L'erreur est due au fait qu'il existe une classe avec le même nom nd même espace de noms dans l'application principale (c.-à-d. MyNameSpace.MyClass). Cela semble cacher la classe qui est définie sur l'assembly que je charge depuis Matlab.

J'ai changé le nom de l'espace de noms de la classe que je charge dans Matlab et maintenant cela fonctionne.