Clear Filters
Clear Filters

アプリケーションコンパイラのエラーについて

20 views (last 30 days)
Kaede
Kaede on 15 Jul 2020
Commented: Kaede on 22 Jul 2020
アプリケーションコンパイラを使用してアプリを作成しています.
使用しているプログラムは普通に実行するのには問題はないのですが,アプリを作成してインストールして開こうとするとインデックスが配列要素数(0)を超えていますとでで上手く実行できないのですが何が問題なのでしょうか.
  9 Comments
Kaede
Kaede on 16 Jul 2020
"その場合、ファイル名のパスをアプリ実行時に与える必要があります。"
ということなのですがこれは今実行しているような
Mushra('..\mashram1\example_config.txt')
コマンドが毎回アプリ実行時に必要ということでしょうか.
本格的に4月からMATLABを使い始めたのですが,ここ2ヶ月ぐらいほとんど触らない期間がありましてほとんど初心者なため理解が追い付いていないのですができるだけわかりやすく説明していただけるとありがたいです.
Kojiro Saito
Kojiro Saito on 16 Jul 2020
@Kaedeさん
コメントありがとうございます。コードの一部をシェアしていただいて原因がわかりました。
vararginというのは可変入力なので、入力引数が0でも1以上でも実行できるようになっています。
ただ、コードの下記の部分で1つめの入力引数(varargin{1})がファイルパスが入力されるのが前提となっています。
config = varargin{1};
if ~exist(config, 'file')
errordlg('The configuration file you have requested does not exist.');
clear global;
return;
end
ですので、「ということなのですがこれは今実行しているような
Mushra('..\mashram1\example_config.txt')
コマンドが毎回アプリ実行時に必要ということでしょうか.」
の質問の回答としては、「必要です」となります。
「インデックスが配列要素数(0)を超えています」のエラーの原因が分かりましたので、後ほどコメント欄ではなく回答欄に解決策を書かせていただきます。

Sign in to comment.

Accepted Answer

Kojiro Saito
Kojiro Saito on 16 Jul 2020
コンパイルしようとしているMushraの関数の一部を見せていただいたので、原因が分かりました。コンパイル後のMushra.exeをダブルクリックするなどして、入力引数無しで実行する場合、
config = varargin{1};
の部分で「インデックスが配列要素数(0)を超えています」のエラーが出ていると思われます。入力引数無しだとvararginが空なので、配列サイズは0ですのでvarargin{1}にアクセスしようとするとこのエラーが出ます
2つの解決策をご提示いたします。Mushra.mをあまり書き換えたくないとのことなので、先にMushra.mを変えない方法をご紹介します。
方法1
1) Windowsのバッチファイル(.bat)をテキストエディターで作成します。
ファイル名はここではcallExe.bat とします。
callExe.batの中身を記述します。Mushra.exeの入力引数にexample_config.txtを与えて実行してコマンドです。
Mushra.exe example_config.txt
2) アプリケーションコンパイラの「エンドユーザー用にインストールされるファイル」で「+」ボタンをクリックし、callExe.batと、コンフィグファイルのexample_config.txtの2つを追加します。下記の画面ではtestExeOrig.exeとなっていますが、ここはMushra.exeと読み替えてください。
3) アプリケーションが作成され、インストールされると、callExe.batとexample_config.txtの2つもインストールされます。下記の画面ではtestExeOrig.exeとなっていますが、ここはMushra.exeと読み替えてください。
4) callExe.batをダブルクリックして実行します。
exeの代わりにbatを実行することで、エンドユーザーの方がコンフィグファイルを指定しなくても入力に入れられます。
方法2
こちらの方法ではMushra.mの冒頭部分を少し修正します。
1) Mushra.mの冒頭部分に、入力引数が無い場合はexample_config.txtを使うような変更を追記します。
function Mushra(varargin)
% Start a Mushra test
% ここから追記
% 入力引数が無い場合は同じフォルダーにあるコンフィグファイルを指定する
if nargin == 0
varargin = {'example_config.txt'};
end
% 追記ここまで
% deal with optional arguments
% 以下はオリジナルと同じです
2) アプリケーションコンパイラの画面で、「エンドユーザー用にインストールされるファイル」で「+」ボタンをクリックし、example_config.txtを追加します。下記の画面ではtestExeV2.exeとなっていますが、ここはMushra.exeと読み替えてください。
3) 「パッケージ化」をクリックして実行ファイルを作成します。
4) アプリケーションをインストールするとアプリケーションフォルダーの中にexample_config.txtもインストールされます。下記の画面ではtestExeV2.exeとなっていますが、ここはMushra.exeと読み替えてください。
5) これで実行ファイルをダブルクリックだけで実行できるようになりました。
6) もし実行ファイルをWindowsのスタートメニューやデスクトップのショートカットから呼び出す場合は、作業フォルダがC:\Windows\System32となってしまうため、コンフィグファイルが見つからないというエラーが出てしまいます。そこで、ショートカットから「ファイルの場所を開く」をクリックし、
C:\ProgramData\Microsoft\Windows\Start Menu\Programsで、該当のショートカットを右クリック「プロパティ」をクリックし、「作業フォルダー」をアプリケーションのインストールフォルダーと同じにしておきます。
これでデスクトップやスタートメニューのショートカットから実行しても、インストールフォルダーにあるexample_config.txtのファイルが読み込まれるようになります。
参考になれば幸いです。

More Answers (1)

Kaede
Kaede on 16 Jul 2020
ご丁寧にありがとうございます.
一つ目のやり方でcallExeを開くとMushra.mのプリグラムができました.
あと質問追加の質問が2つあります.
①for_redistribution_files_onlyを開くと上の画像のフォルダに入っているのと異なっているのですが大丈夫ですか.
②エンドユーザーには何を配ればよいでしょうか.
無知で申し訳ございません.
本当にありがとうございます.
丁寧で分かりやすかったです.
  6 Comments
Kojiro Saito
Kojiro Saito on 17 Jul 2020
Webアプリの手順ですが、こちらの動画(英語)に紹介があります。
・App DesignerでGUIアプリを作成
「新規作成」→「アプリ」をクリックし、App Designerツールを起動します。
ドラッグ&ドロップでGUIレイアウトを配置し、コールバックでGUIを操作したときの制御を記述します。
簡単な例はこちらにあります。
・GUIアプリを作り終えたら、「共有」から「Webアプリ」をクリックしてWebアプリ(ファイル拡張子はctf)に変換します。
・開発用MATLAB Web App Serverをインストール
下記のドキュメントの手順に沿って、MATLAB Compilerのインストールフォルダーに含まれている開発用MATLAB Web App Serverのインストーラーを展開先のマシンに持っていき、開発用MATLAB Web App ServerとMATLAB Runtimeをインストールします。
・開発用MATLAB Web App Serverのセットアップ
下記のドキュメントの手順に沿って開発用MATLAB Web App Serverをサービスに登録し、起動します。
・Webアプリを開発用MATLAB Web App Serverにデプロイ
Webアプリ(.ctf)を展開先のマシンのappsフォルダーに置きます。
例: C:\ProgramData\MathWorks\webapps\R2020a\apps
・エンドユーザーからWebブラウザでアクセス
エンドユーザーのPCやタブレットで、Webブラウザを開き、URLを入力します。
例えば、展開先のサーバー名がserverというホスト名の場合、
http://server:9988
でWebアプリを開けます。
必要に応じてエンドユーザーからのホスト名解決やファイアウォールでのTCPポートの開放を行う必要があります。
Kaede
Kaede on 22 Jul 2020
ありがとうございます.やってみます!

Sign in to comment.

Products

Community Treasure Hunt

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

Start Hunting!