2016-04-29 14 views
2

Mit Matlab Compiler SDK Ich kann meinen Matlab-Code in eine DLL bereitstellen, die in einer C# -Anwendung geladen werden kann. Nun würde ich auch eine .NET-Referenz in meinen Matlab-Code mit dem Matlab-Befehl NET.addAssembly hinzufügen. Wenn ich meinen Code in Matlab ausführe, kann ich auf die Methode der Klasse zugreifen, die ich importiert habe. Wenn ich meinen Matlab - Code (mit der hinzugefügten .net - Referenz) kompiliere, um meine gewohnte DLL zu haben, werden die Methoden der .NET - Klasse, die ich in meinen Matlab - Code importiert habe, nicht mehr angezeigt (Matlab gibt den Fehler "Nein geeignete Methode, Eigenschaft oder Feld 'MyMethodName' für Klasse 'MyNameSpace.MyClass' ". Gibt es jemanden, der mir helfen kann? Vielen Dank im Voraus.Kann keine .NET-Methoden in deployed Matlab dll verwenden

PS: Es könnte seltsam erscheinen, ein .NET-Projekt zu haben Diese Referenz eine Matlab kompilierte DLL, die eine andere C# dll verweisen.Der Grund ist, dass ich alle meine (große) Matlab-Projekt in aC# konvertieren muss und ich möchte es Schritt für Schritt tun, aber ohne die Hauptanwendung (C#) zu beeinflussen

+1

Ich führe die gleiche Art Operation (Aufruf von hausgemachten .net Assemblys von Matlab-Code und dann kompilieren dieses letzte) ohne Probleme. Sind Sie sicher, dass Sie alle Assembly-Dateien zum Kompilierungsprozess hinzugefügt haben ('-a' in Matlab-Compiler-Optionen) und dass dies die letzten kompilierten sind? Wenn Sie das Objekt instanziieren können und die Methode nicht gefunden wird, ist es sehr wahrscheinlich, dass es sich nicht um eine letzte kompilierte Assembly handelt, die an kompilierten Matlab-Code gebunden ist. – CitizenInsane

+0

@CitizenInsane Soweit ich es aus der Matlab-Dokumentation verstanden habe, ist eine Option nur für diejenigen Dateien erforderlich, die nicht automatisch von der Abhängigkeitsanalysefunktion ("depfun") gefunden werden können. Insbesondere müssen alle Abhängigkeiten von MEX-Dateien, DLLs oder Shared Libraries mit der Option -a hinzugefügt werden. Meine DLL hat jedoch keine Abhängigkeit, daher muss ich keine Option -a hinzufügen. Da 'NET.AddAssembly' den absoluten Pfad zur DLL benötigt, muss ich nur die DLL am gleichen Ort auch auf dem Produktions-PC haben. Tatsächlich war die Ursache des Fehlers anders (siehe meine Lösung). – Homer1982

+0

@CitizenInsane Können Sie auch an den Prozess der Hauptanwendung anhängen, um Ihre "hausgemachten" .net-Baugruppen zu debuggen? – Homer1982

Antwort

1

Der Fehler wird durch die Tatsache verursacht, dass es eine Klasse mit dem gleichen Namen gibt den gleichen Namespace in der Hauptanwendung (d. h. MyNameSpace.MyClass). Dies scheint die Klasse zu verbergen, die auf der Assembly definiert ist, die ich von Matlab geladen habe.

Ich habe den Namen des Namespace der Klasse geändert, die ich in Matlab geladen habe und jetzt funktioniert es.

Verwandte Themen