首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >利用MATLAB MWArray.dll实现C#类库

利用MATLAB MWArray.dll实现C#类库
EN

Stack Overflow用户
提问于 2014-04-30 09:39:25
回答 3查看 9.3K关注 0票数 4

我试图在.dll中使用C#类库中的C#类库,这是在MATLAB编译器中构建的,但是每次初始化MWArray.dll对象时,程序都会抛出异常,例如:

代码语言:javascript
运行
复制
MWNumericArray m = new MWNumericArra(10,10);

例外:

代码语言:javascript
运行
复制
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。

有什么想法吗?

EN

回答 3

Stack Overflow用户

发布于 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#

票数 4
EN

Stack Overflow用户

发布于 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。

我希望这能帮到你!扎克

代码语言:javascript
运行
复制
using MathWorks.MATLAB.NET.Arrays;
using MathWorks.MATLAB.NET.Utility;


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

}
票数 3
EN

Stack Overflow用户

发布于 2016-11-15 20:11:27

所以这个神奇的开始发生在一个Windows服务器上,在这个服务器上几个星期内没有任何改变。

对于我来说,在撕开眼睛之后,解决方案是将网站应用程序池中的“启用32位应用程序”设置为FALSE。一旦我这样做了,一切正常,我把我的眼球放回他们的眼窝。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23384629

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档