デバッグ版を起動できないという問題

リリース版は走っているのだが,デバッグ版で起動時に障害が起きる.フォームのコンストラクタでInitializeComponentを実行する前に落ちてしまうので,手が付けられない.コンソールはこの時点ではすでに開かれている.C#プロジェクトがコンソールアプリになっているためだ.出力をWindowsアプリに切り替えても動作は変わらないので,コンソールが出ていることは障害の原因にはなっていないと思う.では,何のどこが悪いのか?C#部分(に限らず既存コードすべて)にはまったく手を触れていないはずなので,なぜこのようなことになってしまったのか?まったく理解に苦しむところだ.

ビルドオプション関係が書き換わってしまっていたり,いじってしまっている可能性はあり,それが影響している可能性が一番高いように思われるのだが,特定するのは難しい.既存コードと目視で比較するのと,作り直ししてしまうのでどちらが早いだろう?原因を特定したいところだが,動かないことにはどうにもならない(デバッグもできない)ので,出直して動かすことを優先する方が賢明かもしれない… まず,最終の準同型検定CSまで戻ってみることにしよう.とりあえず,最終版の準同型検定CSを準同型検定CS+とリネームして始めることにする.

警告が1件出ている.warning MSB8004: Output ディレクトリの末尾がスラッシュではありません。Output ディレクトリが適切に評価されるようにするために、このビルド インスタンスによってスラッシュが追加されます。⇒これは簡単に解決する.ElsieProjectの出力ディレクトリの末尾の\が落ちているためだ.しかし,別の警告が出てきた.

warning MSB3270: 構築されているプロジェクトのプロセッサ アーキテクチャ “MSIL” と、参照 “D:\準同型検定CS+\Debug\ElsieProject.dll” のプロセッサ アーキテクチャ “x86” の間には不一致がありました。この不一致は、ランタイム エラーを発生させる可能性があります。プロジェクトと参照の間でプロセッサ アーキテクチャが一致するように、構成マネージャーを使用してターゲットとするプロジェクトのプロセッサ アーキテクチャを変更するか、ターゲットとするプロジェクトのプロセッサ アーキテクチャに一致するプロセッサ アーキテクチャとの依存関係を参照で設定することを検討してください。

https://nanoris.livedoor.blog/archives/51798587.html

上のリンクの記事によると,原因は「Any CPU、x86、x64 が混在している。Any CPU に対して、x86, または x64 が固定的に組み合わさっている。」ということのようだが… 確かに,Any CPUとWin32が混在した状態になっている.ただし,これで問題なく動作してきたような気がするのだが… おそらく,この警告は昔から出ていたのだろう.

MSILというのは,ProcessorArchitectureの値で,「プロセッサおよびワードあたりのビット数に関して中立」という意味だ.x86というのはIntelのCPUという意味で,32ビットの場合も,64ビットの場合もあり得る.今の場合,AmdやAppleのCPUを使うということは想定されていないのだから,x86でよいのではないだろうか?どうしたことだろう.今度はリリース版で起動時障害が発生してしまった.デバッグ版でも同じだ.プラットフォームをAny CPUに戻したら実行できるようになった.これは警告を無視するしかないような気がする.

ここにAriadne100を移植する.前回は既存プロジェクトを使ったが,今回は新規にプロジェクトを起こしてみよう.⇒ちょっと失敗してしまった.Ariadne100の下にAriadne100ができてしまった.⇒既存フォルダがあると新規プロジェクトを生成できない.

pch.cpp, pch.h, framework.hをプロジェクトから除外した.dllmain.cppも外しておく.⇒*.pchファイルがない⇒プリコンパイル済みヘッダを使わないとする.これでようやくコンパイルができるようになった.エラーがかなり出ている.

E0167    型 “const char *” の引数は型 “char *” のパラメーターと互換性がありません    Ariadne100    D:\準同型検定CS+\Ariadne100\Contract.cpp    613    ⇒対処した.

リリース版,デバッグ版のどちらでも動作するようになった.一度バックアップを取っておこう.フォルダ名は「アリアドネの糸巻き」,アセンブリ名は「アリアドネの糸」に変えてみた.EXEはアリアドネの糸.exeという名前になる.現行では下図のような画面になっている.これにどう組み込んだらよいか?

image

タブで切り替えるような作りになっているが,コンソールが常時出ているとしたら,それも不要という感じになる.当面,①行列同型,②ハミルトン閉路の2つのボタンがあればよいのではないか?画面に出すとすれば,むしろマトリックスを入出力できるようなグリッドを表示するというのが適切なのではないかという気がする.Ariadneを組み込むに当たってまずやるべきことは,すべてのクラスを名前空間の中に収納することだ.ARIADNATIVEとした.⇒一応EXEが走るところまで来たので,一度バックアップを取っておこう.

▲コンソールにはスクロールバーは付けられないのだろうか?⇒縦スクロールバーは自動的に付加されているが…

image

テストボタンを押すと,ハミルトン検定のメニュー画面が出るようになった.つまり,アリアドネ100の画面がそのままコンソールに表示される.行列同型検定も同じような作りで起動できるようにしておこう.

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA