2

.NET 統合とカプセル化データの列挙を使用する DLL を作成するときに、MATLAB R2010b で問題が発生しました。

例:

  1. MATLAB で使用される .NET アセンブリがあります。「MyAssembly」(MyAssembly.dll) と呼びましょう。
  2. Matlab列挙型クラス「OpenMode」があります

    
    classdef OpenMode
        methods
            function obj = OpenMode(netType)
                obj.Net = netType;
            end
        end
        properties
            Net
        end
        enumeration
            ReadOnly  (MyAssembly.OpenMode.ReadOnly)
            ReadWrite (MyAssembly.OpenMode.ReadWrite)
        end
    end
    
    このクラスは .NET 列挙を使用します: "MyAssembly.OpenMode" Matlab 列挙を介して .NET 列挙にアクセスするような方法で (私の場合はキャスト型に必要です):
    
    netElem = OpenMode.ReadOnly.Net;
    cls = class(netElem)
    cls = 
        MyAssembly.OpenMode
    

  3. エクスポートする必要がある Matlab 関数:

    
    function retVal = MyFunction(inputs)
        NET.addAssembly('MyAssembly.dll');
        flag = OpenMode.ReadOnly;
        netFlag = flag.Net;
        % Some code...
    end
    

  4. Matlab に .NET アセンブリを追加します (チェック中)
    
    NET.addAssembly('MyAssembly.dll')
    
  5. Dll をコンパイルしてみます。
    
    mcc -B csharedlib:MyLib MyFunction
    
    ...そしてエラーを取得します:
    
    Depfun error: 'Undefined variable "MyAssembly" or class "MyAssembly.OpenMode.ReadOnly".' 
    ??? Error using ==> mcc
    Error executing mcc, return status = 1 (0x1).
    

mcc コンパイラはコード列挙で「MyAssembly」が存在することを検出しませんが、次の関数は正常にコンパイルされます。


    function retVal = MyFunction(inputs)
        netflag = MyAssembly.OpenMode.ReadOnly;
        % Some code...
    end

MATLAB で同様の問題に直面し、解決策を見つけた場合は、どうすればよいか教えてください。

ありがとう!

よろしく、アイアン

4

1 に答える 1

2

私はこれらの問題の解決策を見つけているようです。あまりエレガントではありませんが、機能します。

mcc コンパイラには、オプション " -a filename " があります。このオプションを使用すると、CTF アーカイブ用に指定したファイルを追加できます。.NET アセンブリを使用して、列挙を定義するすべてのファイルを追加します。

私の場合の例:

mcc -B csharedlib:MyLib MyFunction -a OpenMode

...または一般的に:

mcc -B csharedlib:MyLib MyFunction -a projectdir/*.m

これをビルドスクリプトで自動化しました。これは、これまでのところ機能する唯一のソリューションです。

于 2010-10-29T22:12:25.253 に答える