Why do invalid cast exceptions occur when executing MATLAB R2022b functions from Visual Basic .NET applications?

7 ビュー (過去 30 日間)
I am using the .NET class "MATLABEngine" to call MATLAB functions as methods from a Visual Basic .NET console app, as described in the documentation below:
I'm able to get the expected output shown in the Visual Basic .NET example for the "StartMATLAB" method, which starts a new MATLAB process with default options.
However, when I add the following lines of code that call the "magic" MATLAB function to the Visual Basic .NET example code:
Dim xIn As Double = 5.0
Dim results(,) As Double
results = matlab.magic(xIn)
I receive an invalid cast exception as shown below:
Unhandled exception. System.InvalidCastException: Unable to cast object of type 'MathWorks.MATLAB.Types.FevalTaskResult' to type 'System.Double[,]'.
   at <NAME OF CONSOLE APP>.Program.Main() in <PATH TO PROGRAM FILE CONTAINING EXAMPLE CODE>:<LINE 3 FROM EXAMPLE CODE>
I would like to resolve this error to get a better understanding of building Visual Basic .NET console apps that leverage MATLAB functions.

採用された回答

MathWorks Support Team
MathWorks Support Team 2023 年 3 月 7 日
In Visual Basic .NET, you have to use the "CTypeDynamic" method to convert variables of dynamic type (e.g. the return of "matlab.magic()") to a known type (e.g. Double(,)). For more information regarding the "CTypeDynamic" method, take a look at Microsoft's documentation linked below:
For example, modify the line:
results = matlab.magic(xIn)
To:
results = CTypeDynamic(matlab.magic(xIn), GetType(Double(,)))
As of R2022b, this is necessary for writing Visual Basic .NET code due to dynamic typing, and unfortunately there is no way to make the code less verbose at this time. A code example is attached with the file "Program.vb".

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeCall MATLAB from .NET についてさらに検索

製品


リリース

R2022b

Community Treasure Hunt

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

Start Hunting!

Translated by