簡體   English   中英

在C#類庫中使用MATLAB MWArray.dll

[英]Using MATLAB MWArray.dll in C# Class Library

我正在嘗試在C#類庫中使用帶有Matlab .net Complier的MATLAB構建的.dll,但是每次初始化MWArray.dll的對象時程序都會拋出異常,例如:

MWNumericArray m = new MWNumericArra(10,10);

例外:

System.TypeInitializationException was caught
  HResult=-2146233036
  Message=The type initializer for 'MathWorks.MATLAB.NET.Arrays.MWNumericArray' threw an exception.
  Source=MWArray
  TypeName=MathWorks.MATLAB.NET.Arrays.MWNumericArray
  StackTrace:
       at MathWorks.MATLAB.NET.Arrays.MWNumericArray.op_Implicit(Double[] values)
       at VolCalc.Vol.CalculateVolatility(Double[] data)
  InnerException: System.TypeInitializationException
       HResult=-2146233036
       Message=The type initializer for 'MathWorks.MATLAB.NET.Arrays.MWIndexArray' threw an exception.
       Source=MWArray
       TypeName=MathWorks.MATLAB.NET.Arrays.MWIndexArray
       StackTrace:
            at MathWorks.MATLAB.NET.Arrays.MWIndexArray..ctor()
            at MathWorks.MATLAB.NET.Arrays.MWNumericArray..ctor(Double scalar)
            at MathWorks.MATLAB.NET.Arrays.MWNumericArray.get__Inf()
            at MathWorks.MATLAB.NET.Arrays.MWNumericArray..cctor()
       InnerException: System.Security.SecurityException
            HResult=-2146233078
            Message=Request for the permission of type 'System.Security.Permissions.SecurityPermission, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.
            Source=MWArray
            StackTrace:
                 at MathWorks.MATLAB.NET.Utility.MWSafeHandle..ctor()
                 at MathWorks.MATLAB.NET.Arrays.MWArray..ctor()
                 at MathWorks.MATLAB.NET.Arrays.MWIndexArray..ctor()
                 at MathWorks.MATLAB.NET.Arrays.MWNumericArray..ctor(MWArrayComponent arrayComponent, Int32 rows, Int32 columns)
                 at MathWorks.MATLAB.NET.Arrays.MWIndexArray..cctor()
            InnerException: 

我嘗試在Console App中執行此操作,並且工作正常,但我需要.dll使用matlab內置的.dll。

有任何想法嗎?

幫助我的是確保C#應用程序和matlab模塊在相同的架構下 - 意思是32位或64位。

如果您的Matlab是64位 - 嘗試將C#項目更改為64位

請參閱以下文章: 在Matlab中創建共享庫(.NET程序集)並在C#中使用它

我正在解決同樣的問題,在我的情況下,它似乎是.csproj文件中的內容,聽起來很奇怪。

一般情況下,我建議嘗試以下方法:創建一個新的Windows窗體應用程序並添加附帶的代碼。 不要忘記添加對MWArray.dll的引用。 運行代碼,如果拋出異常,那么Matlab運行時的安裝問題或運行時的x86 / x64版本與構建的應用程序不匹配。 (你表示你已經這樣做了,但這是一個旨在幫助他人的一般答案)

將附帶的代碼添加到應用程序的program.cs中,看看它是否會引發異常。 繼續前進到拋出異常的DLL,直到拋出異常。

當最終拋出異常時,驗證項目的x86 / x64是否與Matlab運行時的x86 / x64匹配。

如果x86 / x64版本匹配,請創建一個具有不同類名的新DLL項目,其構造函數與失敗的DLL具有相同的簽名。 將附帶的代碼添加到新的DLL中,將失敗的DLL解除連接並連接到這個新的DLL,然后運行該應用程序。 如果代碼沒有拋出異常,那么您可能在.csproj文件或其他DLL中遇到問題。 將失敗的DLL中的代碼塊復制並粘貼到新的DLL中,然后重新測試異常。 繼續,直到所有代碼都被復制或直到異常返回。 如果異常返回,請繼續進行故障排除以查找有問題的代碼行。 如果所有代碼都已復制,那么您將擁有一個正常運行的DLL。 您應該能夠從那里取出它以擺脫失敗的DLL並將其替換為新的功能DLL。

我希望這有幫助! 扎克

using MathWorks.MATLAB.NET.Arrays;
using MathWorks.MATLAB.NET.Utility;


try
{
    MWNumericArray oMW = new MWNumericArray();
}
catch (Exception ex)
{

}

所以這神奇地開始發生在Windows服務器上,幾周內服務器上沒有任何變化。

我的解決方案就是將網站應用程序池中的“啟用32位應用程序”設置設置為FALSE 一旦我這樣做,一切正常,我把眼球放回插座。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM