我试图在.dll中使用C#类库中的C#类库,这是在MATLAB编译器中构建的,但是每次初始化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: 我尝试在控制台应用程序中这样做,并且工作良好,但我需要使用.dll构建的.dll。
有什么想法吗?
发布于 2014-11-13 15:32:54
帮助我的是确保C#应用程序和matlab模块采用相同的体系结构--即32位或64位。
如果您的Matlab是64位-尝试将C#项目更改为64位
见本文:Creating a shared library (.NET Assembly) in Matlab and using it in C#
发布于 2014-05-03 22:00:41
我正在处理同样的问题,在我的例子中,它似乎是.csproj文件中的一些东西,尽管听起来很奇怪。
通常,我建议尝试以下方法:创建一个新的Windows窗体应用程序并添加所附代码。不要忘记添加对MWArray.dll的引用。运行代码,如果抛出异常,则Matlab运行时或运行时和构建的应用程序的x86 / x64版本不匹配。(你表示你已经这样做了,但这是一个旨在帮助他人的一般答案)
将所附代码添加到应用程序的program.cs中,并查看它是否引发异常。继续处理抛出异常的DLL,直到抛出异常为止。
当最终抛出异常时,验证项目的x86 / x64与Matlab运行时的匹配。
如果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)
{
}发布于 2016-11-15 20:11:27
所以这个神奇的开始发生在一个Windows服务器上,在这个服务器上几个星期内没有任何改变。
对于我来说,在撕开眼睛之后,解决方案是将网站应用程序池中的“启用32位应用程序”设置为FALSE。一旦我这样做了,一切正常,我把我的眼球放回他们的眼窝。
https://stackoverflow.com/questions/23384629
复制相似问题