2016-04-29 80 views
2

使用Matlab Compiler SDK我可以將我的Matlab代碼部署到可以在C#應用程序中加載的dll中。 現在我還將使用NET.addAssembly matlab命令將.NET參考添加到我的Matlab代碼中。如果我在Matlab中運行我的代碼,我可以訪問我導入的類的方法。不幸的是,如果我編譯我的Matlab代碼(帶有添加的.net引用)以使我平常的dll看起來似乎我已經導入到我的matlab代碼中的.net類的方法不再可見(matlab會拋出一個錯誤「No適當的方法,屬性或字段'MyMethodName'類'MyNameSpace.MyClass'「。 有人可以幫助我嗎?提前致謝。引用一個Matlab編譯的dll,引用另一個c#dll。原因是我需要在ac#中轉換所有我的(大)Matlab項目,我希望一步一步完成,但不會影響主(C#)應用程序在部署的matlab中不能使用.NET方法dll

+1

我正在執行同樣的操作(從matlab代碼中調用自制的.net程序集,然後編譯最後一個),沒有問題。你確定你已經將所有的彙編文件加入到編譯過程中了嗎(matlab編譯器選項中的'-a'),並且這些是最後編譯的文件?很可能如果你能夠實例化對象並且找不到的方法是它不是最後編譯的程序集,它與編譯的matlab代碼有關。 – CitizenInsane

+0

@CitizenInsane據我從Matlab文檔中瞭解到,-a選項僅適用於那些不能由依賴分析函數('depfun')自動定位的文件。特別是MEX文件,DLL或共享庫的所有依賴項都必須使用-a選項添加。但是,我的dll沒有任何依賴關係,所以我不需要添加任何-a選項。由於'NET.AddAssembly'需要dll的絕對路徑,所以我只需要將dll放在生產PC上的相同位置即可。事實上,錯誤的原因是不同的(請參閱我的解決方案)。 – Homer1982

+0

@CitizenInsane您是否還能夠附加到主應用程序的進程以調試您的「自制」.net程序集? – Homer1982

回答

1

錯誤是由於有一個同名的類a在主應用程序中找到相同的命名空間(即MyNameSpace.MyClass)。這似乎隱藏了我從Matlab加載的程序集中定義的類。

我改變了我在Matlab中加載的類名稱空間的名稱,現在它的工作原理。