Invalid Callee when using Matlab as a COM server

조회 수: 4 (최근 30일)
Glover Ruiz
Glover Ruiz 2012년 9월 28일
답변: Andy 2024년 4월 21일
hello yall! I am trying to use matlab as a com server and I am getting the following error when using GetWorkspaceData()
Invalid callee. (Exception from HRESULT: 0x80020010 (DISP_E_BADCALLEE))
here is the code I am using
compiling with MS VStudio 2010 Professional, .NET 3.5
Private Sub RunAsServer() Matlab = New MLApp.MLApp Matlab.MaximizeCommandWindow() Matlab.Execute("cd c:\matlab") Matlab.Execute("a = 23;")
Dim thevar As Object = vbNull Try Matlab.GetWorkspaceData("a", "base", thevar) TextBoxBuffer.Text += thevar.ToString Catch ex As Exception MessageBox.Show(ex.Message) End Try
end Sub
  댓글 수: 1
Janis Stolzenwald
Janis Stolzenwald 2019년 2월 10일
편집: Janis Stolzenwald 2019년 2월 10일
Wow, this question remained unanswered for 7yrs now. "MATLAB Answers" should be called "MATLAB solve it yourself please".
Same problem here. When calling matlab code in a c# loup it crashes after the first iteration with the error message above.

댓글을 달려면 로그인하십시오.

답변 (2개)

Janis Stolzenwald
Janis Stolzenwald 2019년 2월 10일
I solved the problem in my case. Make sure to set the out variable back to null before passing it to Feval again.

Andy
Andy 2024년 4월 21일
Yeah, interesting @Janis Stolzenwald! Stumbled across the same problem ... thanks for sharing your solution 7 years later!
Did you manage to find also how to do *.Feval on function within function ... such as:
> t2.GetType()
[System.Double[,]]
> object results = null; matlab.Feval("cov", 1, out results, t2)
> results
object[1] { double[10, 10] { { 32.2, -34.599999999999994, 71.65, 1856.1999999999998, 94.25, 35.45, 92.2, 152.3, -138.3, 157 }, { -34.599999999999994, 2939.7999999999993, 2205.55, 18073.399999999998, -40.24999999999994, 261.15000000000003, 2120.3999999999996, 69.10000000000008, 1741.9, 3924 }, { 71.65, 2205.55, 3813.3, 15569.649999999998, 728.5, 39.14999999999998, 3730.3999999999996, 1317.1, 1380.65, 6561.5 }, { 1856.1999999999998, 18073.399999999998, 15569.649999999998, 395910.19999999995, 7004.25, 6084.450000000001, 17791.2, 13353.3, -6674.299999999999, 34322 }, { 94.25, -40.24999999999994, 728.5, 7004.25, 432.5, 61.750000000000014, 788, 729.5000000000001, -400.75, 1367.5 }, { 35.45, 261.15000000000003, 39.14999999999998, 6084.450000000001, 61.750000000000014, 123.2, 79.19999999999999, 119.8, -135.04999999999998, 189.5 }, { 92.2, 2120.3999999999996, 3730.3999999999996, 17791.2, 788, 79.19999999999999, 3677.2, 1419.8000000000002, 1159.2, 6482 }, { 152.3, 69.10000000000008, 1317.1, 13353.3, 729.5000000000001, ...
> object results = null; matlab.Feval("cov(cov)", 1, out results, t2)
System.Runtime.InteropServices.COMException: Undefined function 'cov(cov)' for input arguments of type 'double'.
+ System.RuntimeType.ForwardCallToInvokeMember(string, System.Reflection.BindingFlags, object, object[], bool[], int[], System.Type[], System.Type)
+ MLApp.MLAppClass.Feval(string, int, out object, object, object, object, object, object, object, object, object, object, object, object, object, object, object, object, object, object, object, object, object, object, object, object, object, object, object, object, object, object, object, object, object)
>
did not expect the above to work, but not sure it's possible to compute "cov(cov(t2))" ... or any other combination of function of a function of a variable ... any ideas?

카테고리

Help CenterFile Exchange에서 Write COM Applications to Work with MATLAB에 대해 자세히 알아보기

태그

제품

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by