在 Matlab 中创建共享库 (.NET Assembly) 并在 C# 中使用它
本文关键字:并在 Assembly NET 创建 Matlab 共享 | 更新日期: 2023-09-27 18:30:18
我已经使用应用程序编译器在Matlab(2014a)中创建了一个.NET程序集,我正在尝试在C#下使用它。
matlab 模块只有 1 个功能:
function [ val ] = AnalyzePicture( arg1 )
val = 5;
end
导出的 .NET DLL 名为 AnalyzePicture.dll并导出 Class1(在 Matlab 应用程序编译器中定义)。但是,当我尝试初始化它时,我收到一个异常,说:
The type initializer for 'MathWorks.MATLAB.NET.Arrays.MWArray' threw an exception
除了内心的例外说:
An attempt was made to load a program with an incorrect format. (Exception from HRESULT: 0x8007000B)
这是代码
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using AnalyzePicture;
using MathWorks.MATLAB.NET.Arrays;
using MathWorks.MATLAB.NET.Utility;
namespace Analyzer
{
public class MatlabWrapper
{
AnalyzePicture.Class1 analyzer = null;
public MatlabWrapper()
{
try
{
// The exception is raised here
analyzer = new AnalyzePicture.Class1();
}
catch (System.Exception ex)
{
MessageBox.Show("f");
}
}
...
我的项目引用了MWArray(8.3,当前版本)和AnalyzePicture dll(和DirectShowLib-2010)。
我试图在网上找到解决方案,但我找不到一个关于如何在 C# 中正确使用 Matlab .NET 程序集的像样的例子。我完全按照本文中所述进行操作,此外我的程序集不是以com.
开头
关于可能导致问题的原因的任何想法?任何代码示例都将得到极大的赞赏
(我使用的是Windows 7 64位,Matlab 2014a 8.3 64位)
以防
其他人遇到同样的问题。我前段时间遇到了这个问题,所以我想出了完整的解决方案。
您需要将项目设置设置为使用 .Net Framework 4.0(而不是将 4.5 VS 2013 集设置为默认版本),并将目标平台更改为 x64。这套套装在 Win 8.1 (x64)、MatLab R2013a(x64,运行时版本 8.1)和 Visual Studio 2013 上运行良好。
如果您发布了 matlab 64 位 dll,请将您的 VS 项目构建设置更改为任何 CPU 并取消选中"首选 32 位"属性