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

12 views (last 30 days)
Kaede
Kaede on 15 Jul 2020
Commented: Kaede on 22 Jul 2020
アプリケーションコンパイラを使用してアプリを作成しています.
使用しているプログラムは普通に実行するのには問題はないのですが,アプリを作成してインストールして開こうとするとインデックスが配列要素数(0)を超えていますとでで上手く実行できないのですが何が問題なのでしょうか.
  9 Comments
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
Kaede
Kaede on 22 Jul 2020
ありがとうございます.やってみます!

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!