2016-12-07 72 views
1

我有一个非常简单的MATLAB函数:C#结构matlab实现功能

function [x,y] = myfunc(a,b,myStruct) 
x = a + b + myStruct.score; 
y = sprintf('Hello %s',myStruct.name); 

然后我试图做从C#调用这个如下:

class Program 
{ 
    static void Main(string[] args) 
    { 
     MLApp.MLApp matlab = new MLApp.MLApp(); 
     matlab.Execute(@"c:\matlab"); 
     object result = null; 
     var student= new Student {grade = "A", name = "StudentName", score = 90}; 
     matlab.Feval("myfunc", 2, out result, 3.14, 42.0, student); 
     var res = result as object[]; 
    } 
    public struct Student 
    { 
     public string name; 
     private string gr; 
     private int sc; 
     public string grade 
     { 
      get { return gr; } 
      set { gr = value; } 
     } 
     public int score 
     { 
      get { return sc; } 
      set { sc = value; } 
     } 
    } 
} 

很不幸,这总是导致:

类型 'System.ArgumentException' 未处理的异常出现在mscorlib.dll
其他信息:值不在预期范围内。

任何人有任何想法我错过了什么?我跟着MATLAB文档,你有一个公开访问的领域,那么你是好去基本上说只要。

堆栈跟踪:

在System.RuntimeType.InvokeDispMethod(字符串名称,的BindingFlags invokeAttr,对象目标,对象[]指定参数时,布尔[] byrefModifiers,培养的Int32,字符串[] namedParameters) 在系统。 RuntimeType.InvokeMember(String name,BindingFlags bindingFlags,Binder binder,Object target,Object [] providedArgs,ParameterModifier [] modifiers,CultureInfo culture,String [] namedParams) at System.RuntimeType.ForwardCallToInvokeMember(String memberName,BindingFlags flags,Object target ,的Int32 [] aWrapperTypes,MessageData & MSGDATA) 在MLApp.DIMLApp.Feval(字符串BST rName,Int32 nargout,Object & pvarArgOut,Object arg1,Object arg2,Object arg3,Object arg4,Object arg5,Object arg6,Object arg7,Object arg8,Object arg9,Object arg10,Object arg11,Object arg12,Object arg13,Object arg14 ,对象arg15,对象arg16,对象arg17,对象arg18,对象arg19,对象arg20,对象arg21,对象arg22,对象arg23,对象arg24,对象arg25,对象arg26,对象arg27,对象arg28,对象arg29,对象arg30,对象arg31,Object arg32) at C:\ Users {username} \ documents \ visual studio 2015 \ Projects \ rmtest \ rmtest \ Program.cs中的rmtest.Program.Main(String [] args):line 20 at System.AppDomain .nExecuteAssembly(RuntimeAssembly assembly,String [] args) at System.AppDomain.ExecuteAssembly(String assemblyFile,Evidence assemblySecurity,String [] args) at Microsoft.VisualStudio.HostingProcess.HostP在System.Threading.ExecutionContext.Run()上执行System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext,ContextCallback callback,Object state,Boolean preserveSyncCtx)时,System.Threading.ThreadHelper.ThreadStart_Context(对象状态) 上的roc.RunUsersAssembly() 执行上下文执行上下文,ContextCallback回调,对象状态,布尔preserveSyncCtx) 在System.Threading.ExecutionContext.Run(ExecutionContext中的ExecutionContext,ContextCallback回调,对象状态) 在System.Threading.ThreadHelper.ThreadStart()

+0

您可以从运行时异常中提供更多详细信息,例如完整的堆栈跟踪(或堆栈跟踪的相关部分)。 –

+0

我已经包括堆栈跟踪。 – TBD

回答

0

这并诀窍:

IntPtr pnt = Marshal.AllocHGlobal(Marshal.SizeOf(student)); 
matlab.Feval("myfunc", 2, out result, 3.14, 42.0, pnt);